DataFrame复制的奇怪行为[重复]
Posted
技术标签:
【中文标题】DataFrame复制的奇怪行为[重复]【英文标题】:Strange behavior with DataFrame copy [duplicate] 【发布时间】:2018-10-26 08:39:36 【问题描述】:考虑这段代码:
In [16]: data = [['Alex',10],['Bob',12],['Clarke',13]]
In [17]: df = pd.DataFrame(data,columns=['Name','Age'])
Out[18]:
Name Age
0 Alex 10
1 Bob 12
2 Clarke 13
In [19]: df_new = df
In [20]: df_new['Age'] = df_new['Age'] * 90 / 100
In [21]: df_new
Name Age
0 Alex 9.0
1 Bob 10.8
2 Clarke 11.7
In [22]: df
Name Age
0 Alex 9.0
1 Bob 10.8
2 Clarke 11.7
当我为新 DataFrame (df_new) 的 Age 列分配新值时,原始 DataFrame (Age) 的 Age 列em>df) 也发生了变化。
为什么会这样?它与我创建原始 DataFrame 副本的方式有关吗?好像他们被锁在一起了。
【问题讨论】:
pandas.pydata.org/pandas-docs/stable/generated/… 需要df_new = df.copy()
,同时查看this
***.com/questions/17246693/…
【参考方案1】:
使用 -
df_new = df.copy()
或
df_new = df.copy(deep=True)
这是复制pandas
对象的索引和数据的标准方法。
来自pandas documentation
当 deep=True(默认)时,将创建一个新对象,其中包含 调用对象的数据和索引。修改数据或 副本的索引不会反映在原始对象中
说明
如果您看到您创建的各种 DataFrame 的对象 ID,您可以清楚地看到发生了什么。
当您编写 df_new = df 时,您正在创建一个名为 new_df
的变量,并将它与一个与 df
具有相同 id 的对象绑定。
示例
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
df_new = df
df_copy = df.copy()
print("ID of old df: ".format(id(df)))
print("ID of new df: ".format(id(df_new)))
print("ID of copy df: ".format(id(df_copy)))
输出
ID of old df: 113414664
ID of new df: 113414664
ID of copy df: 113414832
【讨论】:
以上是关于DataFrame复制的奇怪行为[重复]的主要内容,如果未能解决你的问题,请参考以下文章