当我运行下面的代码时,id(df.c1)
的值会在分配到df.c2
后从初始化更改。
import pandas as pd
df = pd.DataFrame([(1, 2), (3, 4)], columns=['c1', 'c2'])
print("(before df.c2 assignment) id(df.c1):{0} and id(df):{1}".format(id(df.c1), id(df)))
df.c2 = 20
print("(after df.c2 assignment) id(df.c1):{0} and id(df):{1}".format(id(df.c1), id(df)))
一个样本运行产生:
(before df.c2 assignment) id(df.c1):4440267968 and id(df):4402796528
(after df.c2 assignment) id(df.c1):4440267016 and id(df):4402796528
基于documentation for id
,id
似乎在对象的生命周期内保持不变,这会暗示我df.c1
正在改变,尽管没有分配给它。我想这可能是由于一些熊猫内部人员(例如区块经理),但我对熊猫的了解不足以快速确定这一点。
如果是这种情况,是否有"安全"我可以用于pandas对象的id
的副本?我需要跟踪仪器任务的对象。
Python版本:Python 3.6.3
熊猫版:0.20.2
编辑:
我认为一种可能的解决方法是在数据框系列中使用ctypes.data
作为底层numpy数组。这似乎没有同样的问题。