【发布时间】:2016-10-03 13:32:41
【问题描述】:
我使用 pandas 数据框从 oracle 数据库中访问海量数据,这工作正常。我在派生自数据框的类中实现的一个函数将外键替换为外键指向的数据。效果很好。
因为数据帧中的行数非常高(即 100.000.000),所以我认为在一次又一次这样做之前实现一些测试外键是否已经被替换的东西会很好。所以给派生类增加了一个属性,在数据被替换后设置为True,这样replace方法就可以测试这个状态,如果已经是True就可以跳出来。
class DerivedDataFrame(pandas.DataFrame):
def __init__(self):
self.resolve_status = False
def resolve_data(self, ....):
if not self.resolve_status:
resolve data
self.resolve_status = True
...
问题是当我使用即合并()时,它不能就地工作,而是从合并的数据创建一个新实例并返回它。数据本身没问题,但是由于新实例 self.resolve_status 再次为 False,因为新实例具有 init() 中设置的值,并且不保留合并前的属性值.
有什么办法吗?使用不允许就地操作的方法保留此(和其他)属性的有效解决方案是什么?
【问题讨论】:
-
您是否考虑过在您的类中编写自己的方法来满足您的需求?这应该很简单,不是吗?
-
@John Zwinck:不确定你的意思。当然,我是否有可以(很可能必须)将属性复制到新实例的方法,但不知何故,我希望 pandas 能以更好的方式实现这一点。似乎没有。悬而未决的问题是:为什么不合并支持以就地工作。
标签: python pandas dataframe instance