Pandas DataFrames,Series和id(在CPython中)

时间:2018-04-11 18:29:02

标签: python pandas memory

当我运行下面的代码时,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 idid似乎在对象的生命周期内保持不变,这会暗示我df.c1正在改变,尽管没有分配给它。我想这可能是由于一些熊猫内部人员(例如区块经理),但我对熊猫的了解不足以快速确定这一点。

如果是这种情况,是否有"安全"我可以用于pandas对象的id的副本?我需要跟踪仪器任务的对象。

Python版本:Python 3.6.3

熊猫版:0.20.2

编辑: 我认为一种可能的解决方法是在数据框系列中使用ctypes.data作为底层numpy数组。这似乎没有同样的问题。

0 个答案:

没有答案