【问题标题】:Organizing column and header data with pandas, python使用 pandas、python 组织列和标题数据
【发布时间】:2014-11-04 03:54:42
【问题描述】:

我正在尝试使用 Numpy 代替 Matlab,但我对 Python 比较陌生。

我当前的挑战是以合理的方式将数据导入多个文件中,以便我可以使用和绘制它。数据按列组织(温度、压力、时间等,每个文件都是一个测量周期),我认为 pandas 可能是导入数据的最佳方式。我正在考虑为每个文件使用顶级描述符,并为每列使用子描述符。想过做这样的事情。 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.

我真的不知道如何以与数据框组合时有意义的方式提取和存储数据。可能想到了一本字典,但我不确定如何有效地拆分数据,因为没有一致的分隔符。有什么想法吗?

【问题讨论】:

  • 您是否要求解析标题并用作列名?有点不清楚你想要什么,你能解释一下吗
  • 我并不感到惊讶,这是一个非常开放的问题,因为我对一个好的解决方案没有具体的想法。我不希望它作为标题,我已经有了。我不一定需要它作为数据框的一部分,我真的不知道如何以合理的方式组织它。我可以选择字典之类的东西,只要我可以在需要在绘图中使用它时访问信息或获取有关数据框中数据的更多详细信息,但我不确定如何提取信息.
  • 您可以将其作为属性添加到 df 中:df.flight_ID = 'XXXXXX' 等。但是,如果复制 df,则属性将被 NOT 复制,因此您需要小心

标签: python numpy pandas dataframe


【解决方案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}

我认为您的文件中有一个日期/时间列(此处称为“日期”),因此您可以使用它来重新索引您的数据框。如果您选择在多级索引中使用不同的变量,那么同样的方法也适用。

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):您可以让元数据字典按航班号“键入”。例如

    data.metadata = {FLIGHT1:{'date':date}, FLIGHT2:{'date':date}}

现在存储元数据。检查我的 IO 课程,了解在 here 发布的 h5 文件中存储其他属性。

你的问题很宽泛,所以你得到了一个宽泛的答案。我希望这可以帮到你。

【讨论】:

    猜你喜欢
    • 2016-09-23
    • 1970-01-01
    • 2021-05-16
    • 2016-11-23
    • 1970-01-01
    • 2021-12-21
    • 2014-08-06
    • 2012-04-12
    • 2019-04-21
    相关资源
    最近更新 更多