0

I found a few other posts regarding this topic, but I'm having issues getting it to work for my instance; I am relatively new to Python so I apologize. Below is an example of the first few lines of a txt file that I have:

Year    Month   Day Hour    Minute  Second  Millisecond Longitude   Latitude    Altitude
2019    3   16  22  0   0   0   -143.9558774    0.105859373 399.9938343
2019    3   16  22  0   5   0   -143.9204788    0.427070185 399.9951097
2019    3   16  22  0   10  0   -143.8850757    0.748280246 399.9977697
2019    3   16  22  0   15  0   -143.8496643    1.069488992 400.0018341

Every value is separated by a space and I want to create keys for each so it would be Year, Month, Day, Minute, Second, Millisecond, Longitude, Latitude, and Altitude.

Below is code I am attempting to use, but it's not working properly and throwing the following error below my code.

import numpy as np
from csv import DictReader

# string holding path to satellite orbit data file
path = 'Path'

orbit_data = {}  #initialize dictionary
file = DictReader(open(path  + 'orbit.txt','r'))  #open input data file
for row in file:
    for column, value in row.items():
        orbit_data.setdefault(column, []).append(value)
for key in orbit_data:
    if ((key=='Object') or (key=='Directory')): orbit_data[key]=np.array(orbit_data[key],dtype=str)
    elif ((key=='Year') or (key=='Month') or (key=='Day') or (key=='Hour') or (key=='Minute') or (key=='Second')): orbit_data[key]=np.array(orbit_data[key],dtype=int)
    else: orbit_data[key] = np.array(orbit_data[key],dtype=float)
ValueError                                Traceback (most recent call last)
<ipython-input-6-3afe156299a7> in <module>
     13     if ((key=='Object') or (key=='Directory')): orbit_data[key]=np.array(orbit_data[key],dtype=str)
     14     elif ((key=='Year') or (key=='Month') or (key=='Day') or (key=='Hour') or (key=='Minute') or (key=='Second')): orbit_data[key]=np.array(orbit_data[key],dtype=int)
---> 15     else: orbit_data[key] = np.array(orbit_data[key],dtype=float)

ValueError: could not convert string to float: '2019\t3\t16\t22\t0\t0\t0\t-143.9558774\t0.105859373\t399.9938343'

If you could please provide some guidance as to what I am doing wrong and how to fix it I would appreciate it!

0

2 Answers 2

1

You could using pandas.to_dict("list") as follows:

import pandas as pd
if __name__ == '__main__':
    input_path = "data/orbit.txt"
    orbit_data = pd.read_csv(input_path, sep="\s+", engine="python").to_dict("list")
    print(orbit_data)

Result:

{'Year': [2019, 2019, 2019, 2019], 'Month': [3, 3, 3, 3], 'Day': [16, 16, 16, 16], 'Hour': [22, 22, 22, 22], 'Minute': [0, 0, 0, 0], 'Second': [0, 5, 10, 15], 'Millisecond': [0, 0, 0, 0], 'Longitude': [-143.9558774, -143.9204788, -143.8850757, -143.84966430000003], 'Latitude': [0.105859373, 0.427070185, 0.748280246, 1.0694889920000001], 'Altitude': [399.99383430000006, 399.9951097, 399.9977697, 400.0018341]}
Sign up to request clarification or add additional context in comments.

Comments

0

The default delimiter for any CSV reader is a comma. You didn't change that. As a result, you read the entire line as a single value. You have one key, that being the entire header line. You then set the value to the entire data line. This causes your error.

Create your reader properly:

file = DictReader(open('orbit.txt','r'), delimiter=' ')  #open input data file

Make sure that you strip the line as well.

2 Comments

What do you mean by strip the line?
Look up the strip method for strings.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.