我正在尝试将与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
似乎可行,但是:
编辑:好的,我发现了最大的缺点。这可以很好地将单个DataFrame保存在隔离的文件中,但是如果我有字典,列表或类似的带有DataFrame的字典,则无法使用。
答案 0 :(得分:0)
我建议您可以通过为pandas.DataFrame创建新的子类,使新的类从pandas.DataFrame类继承来并在其中添加所需的属性来完成工作。这似乎有些怪异,但是当您在其他地方使用时,可以安全地使用它。不过,其他内容可能对特定情况有用。