保存带有一些额外信息的DataFrame

时间:2018-10-19 08:56:48

标签: python pandas dataframe

我正在尝试将与DataFrames有关的一些额外信息直接存储在同一DataFrame中,例如一些描述所存储数据的参数。

我将此信息添加为DataFrame的额外属性:

df.data_origin = 'my_origin'
print(df.data_origin)

但是在保存和加载时,这些额外的属性会丢失:

df.to_pickle('pickle_test.pkl')
df2 = pd.read_pickle('pickle_test.pkl')
print(len(df2))
print(df2.definition)
...
465387
>>> AttributeError: 'DataFrame' object has no attribute 'definition'

我发现的解决方法是保存DataFrame的字典,然后将其分配给空DataFrame的字典:

with open('modified_dataframe.pkl', "wb") as pkl_out:
    pickle.dump(df.__dict__, pkl_out)
df2 = pd.DataFrame()
with open('modified_dataframe.pkl', "rb") as pkl_in:
    df2.__dict__ = pickle.load(pkl_in)

print(len(df2))
print(df2.data_origin)
...
465387
my_origin

似乎可行,但是:

  • 有更好的方法吗?
  • 我丢失信息了吗? (显然,所有数据都在那里)
  • Here讨论了一种不同的解决方案,但是我想知道保存类的dict的方法是否可以有效地保存其全部信息。

编辑:好的,我发现了最大的缺点。这可以很好地将单个DataFrame保存在隔离的文件中,但是如果我有字典,列表或类似的带有DataFrame的字典,则无法使用。

1 个答案:

答案 0 :(得分:0)

我建议您可以通过为pandas.DataFrame创建新的子类,使新的类从pandas.DataFrame类继承来并在其中添加所需的属性来完成工作。这似乎有些怪异,但是当您在其他地方使用时,可以安全地使用它。不过,其他内容可能对特定情况有用。