将元信息/元数据添加到pandas DataFrame

是否可以添加一些元信息/元数据到pandasDataFrame?

例如,用于测量数据的仪器名称,负责的仪器等

一种解决方法是创build一个包含这些信息的列,但在每一行中存储单个信息似乎是浪费的!

当然,和大多数Python对象一样,你可以把新的属性附加到pandas.DataFrame

 import pandas as pd df = pd.DataFrame([]) df.instrument_name = 'Binky' 

但是,请注意,尽pipe可以将属性附加到DataFrame,但在DataFrame上执行的操作(例如groupbypivotjoinloc等等)可能会返回一个新的DataFrame, 而不会附加元数据。 pandas还没有一个强大的方法来传播 附加到DataFrame的元数据 。

保存文件中的元数据是可能的。 您可以在这里find如何将元数据存储在HDF5文件中的示例。

不是真的。 虽然你可以像@unutbu提到的那样将包含元数据的属性添加到DataFrame类,但是许多DataFrame方法返回一个新的DataFrame,所以你的元数据将会丢失。 如果你需要操纵你的数据框,那么最好的select是将你的元数据和DataFrame包装到另一个类中。 在GitHub上查看这个讨论: https : //github.com/pydata/pandas/issues/2485

目前有一个公开的拉取请求来添加一个MetaDataFrame对象,这将更好地支持元数据。

刚刚碰到这个问题我自己。 从pandas 0.13开始,DataFrames上有一个_metadata属性,它通过返回新的DataFrame的函数持久化。 也似乎生存序列化就好(我只试过json,但我想hdf也包括在内)。

为了这个,我想这可能会有帮助,如果你需要元数据来保存I / O。 有一个相对较新的包叫做h5io ,我一直用它来完成这个任务。

它应该让你从HDF5快速读取/写入几种常见的格式,其中之一就是dataframe。 例如,您可以将数据框放在字典中,并将元数据作为字段包含在字典中。 例如:

 save_dict = dict(data=my_df, name='chris', record_date='1/1/2016') h5io.write_hdf5('path/to/file.hdf5', save_dict) in_data = h5io.read_hdf5('path/to/file.hdf5') df = in_data['data'] name = in_data['name'] etc... 

另一种select是查看像xray这样的项目,在某些方面这更复杂,但是我认为它可以让你使用元数据,并且很容易转换为DataFrame。

正如其他答案和评论中提到的, _metadata不是公共API的一部分,所以在生产环境中使用它绝对不是一个好主意。 但是你仍然可能想在研究原型中使用它,如果它停止工作,就更换它。 而现在它适用于groupby / apply ,这是有帮助的。 这是一个例子(我在其他答案中找不到):

 df = pd.DataFrame([1, 2, 2, 3, 3], columns=['val']) df.my_attribute = "my_value" df._metadata.append('my_attribute') df.groupby('val').apply(lambda group: group.my_attribute) 

输出:

 val 1 my_value 2 my_value 3 my_value dtype: object