在不丢失DataFrames属性的情况下对Pandas DataFrames进行切片



我喜欢通过简单地设置属性及其相应值来存储关于数据帧的元数据,如下所示:df.foo = "bar"然而,我发现,一旦我对数据帧进行切片,像这样存储的属性就会消失:

df.foo = "bar"
df[:100].foo
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:UsersadminPycharmProjectsprojectvenvlibsite-packagespandascoregeneric.py", line 5465, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'foo'

我想知道这种行为是否可以改变,类似于drop=Trueinplace=True如何改变df.set_index(args)等属性的工作方式。我在熊猫文档中没有发现任何有用的东西。

对于许多操作,pandas返回一个新对象,因此您定义的任何属性(在pd.DataFrame类中不受本机支持(都不会持久存在。

一个简单的替代方案是对DataFrame进行子类化。您需要确保将属性添加到_metadata,否则它将不会持久化

import pandas as pd
class MyDataFrame(pd.DataFrame):
# temporary properties
_internal_names = pd.DataFrame._internal_names
_internal_names_set = set(_internal_names)
# normal properties
_metadata = ["foo"]
@property
def _constructor(self):
return MyDataFrame

df = MyDataFrame({'data': range(10)})
df.foo = 'bar'
df[:100].foo
#'bar'

相关内容

最新更新