是否可以向pandas DataFrame添加一些元信息/元数据?
例如,用于测量数据的仪器名称,负责的仪器等.
一种解决方法是创建一个包含该信息的列,但在每一行中存储单条信息似乎很浪费!
我希望能够将元数据附加到一系列数据帧(特别是原始文件名)上,以便在加入两个数据帧之后,我可以看到每个系列来自何处的元数据。
我看到关于GitHub的问题_metadata(在这里,在这里),包括一些与当前_metadata属性(在这里),但没有在大熊猫文档。
到目前为止,我可以修改_metadata属性以允许保留元数据,但是AttributeError在加入之后会得到一个提示。
df1 = pd.DataFrame(np.random.randint(0, 4, (6, 3)))
df2 = pd.DataFrame(np.random.randint(0, 4, (6, 3)))
df1._metadata.append('filename')
df1[df1.columns[0]]._metadata.append('filename')
for c in df1:
df1[c].filename = 'fname1.csv'
df2[c].filename = 'fname2.csv'
df1[0]._metadata # ['name', 'filename']
df1[0].filename # fname1.csv
df2[0].filename # fname2.csv
df1[0][:3].filename # fname1.csv
mgd = pd.merge(df1, df2, on=[0])
mgd['1_x']._metadata # ['name', 'filename']
mgd['1_x'].filename # raises AttributeError
Run Code Online (Sandbox Code Playgroud)
有什么办法可以保留吗?
更新:结语
作为讨论在这里,__finalize__无法跟踪系列是一个数据帧的成员中,只有独立的系列。因此,现在我将通过维护附加到数据帧的元数据字典来跟踪系列级别的元数据。我的代码如下:
def cust_merge(d1, d2):
"Custom merge function …Run Code Online (Sandbox Code Playgroud)