使用pandas,python组织列和标题数据

时间:2014-09-10 13:15:19

标签: python numpy pandas dataframe

我正在使用Numpy而不是Matlab,但我对Python相对较新。

我目前的挑战是以合理的方式在多个文件中导入数据,以便我可以使用和绘制它。数据以columnes(温度,压力,时间等,每个文件作为测量周期)组织,我认为大熊猫可能是导入数据的最佳方式。我正在考虑为每个文件使用top-leve描述符,并为每列使用subdescriptors。想做这样的事情。 Reading Multiple CSV Files into Python Pandas Dataframe

问题是我想保留并使用标题中的一些数据(例如用于绘图)。没有列标题,但有关数据测量的一般信息,如下所示:

 Flight ID: XXXXXX
 Date: 01-27-10  Time: 5:25:19
 OWNER
 Release Point: xx.304N  xx.060E  11 m
 Serial Number xxxxxx
 Surface Data:  985.1 mb   1.0 C 100%   1.0 m/s @ 308 deg.

我真的不知道如何在与数据框结合时以一种有意义的方式提取和存储数据。想到也许是字典,但我不确定如何有效地分割数据,因为没有一致的分隔符。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

看起来有人正在使用无线电探空仪......

当我提取无线电探空仪数据时,我通常将其放入多级索引数据帧中。水平可以是各种形式和顺序,但像FLIGHT_NUM,DATE,ALTITUDE等等都是有意义的。此外,在处理探测器数据时,我也想要一些不一定需要存储在数据帧中的附加信息,因此我将其存储为附加属性。如果我要解析你的文件,然后存储它,我会做一些事情(是的,可以进行修改"改进"这个):

import pandas as pd

with open("filename.csv",'r') as data:
    header = data.read().split('\n')[:5] # change to match number of your header rows
    data = pd.read_csv(data, skiprows=6, skipinitialspace=True, na_values=[-999,'Infinity','-Infinity'])

# now you can parse your header to get out the necessary information
# continue until you have all the header info you want/need; e.g.
flight = header[0].split(': ')[1]
date = header[1].split(': ')[1].split('')[0]
time = header[1].split(': ')[2]

# a lot of the header information will get stored as metadata for me.  
# most likely you want more than flight number and date in your metadata, but you get the point.
data.metadata = {'flight':flight,
                 'date':date}

我认为您的文件中有一个日期/时间列(在其中调用#34;日期"此处),因此您可以使用它来重新索引数据帧。如果您选择在多级索引中使用不同的变量,则应用相同的方法。

new_index  = [(data.metadata['flight'],r) for r in data.dates]
data.index = pd.MultiIndex.from_tuples(new_index)

您现在拥有一个多级索引数据框。

现在,关于你的"元数据"。 EdChum提出了一个很好的观点,如果你复制"数据"你不会复制元数据字典。此外,如果您保存"数据"通过data.to_pickle到数据框,您将丢失元数据(稍后将详细介绍)。如果您想保留元数据,可以选择几种方式。

  1. 逐个航班保存数据。这将允许您存储每个航班的文件的元数据。

  2. 假设您希望在一个已保存的文件中包含多个航班:您可以在数据框中添加一个包含该信息的附加列(即另一列用于航班号,另一列用于表面温度等),但这将增加您保存的文件的大小。

  3. 假设您希望在一个已保存的文件中有多个航班(选项2):您可以制作元数据字典" keyed"按航班号。例如

    data.metadata = {FLIGHT1:{' date':date},                  机票网:{'日期':日期}}

  4. 现在存储元数据。检查我的IO类是否已在发布here的h5文件中存储其他属性。

    你的问题非常广泛,所以你得到了广泛的答案。我希望这可以帮到你。