gus*_*avz 5 python deep-copy dataframe pandas
我遇到了一些我觉得很奇怪的事情:显然,真正深度复制 pandas 数据帧是不可能的。
我希望,如果我创建数据帧的深层副本,并修改该副本中的数据,它不会影响原始数据帧。但显然情况并非如此,如果我没有错的话甚至是可能的。
重现代码:
import pandas as pd
df = pd.DataFrame({'sets':set([1,2])}, index=[0])
def pop(df_in):
df = df_in.copy()
print(df['sets'].apply(lambda x: set([x.pop()])))
pop(df)
pop(df)
pop(df)
>>> KeyError: 'pop from an empty set'
Run Code Online (Sandbox Code Playgroud)
或者
import copy
import pandas as pd
df = pd.DataFrame({'sets':set([1,2])}, index=[0])
def pop(df_in):
df = copy.deepcopy(df_in)
print(df['sets'].apply(lambda x: set([x.pop()])))
pop(df)
pop(df)
pop(df)
>>> KeyError: 'pop from an empty set'
Run Code Online (Sandbox Code Playgroud)
我的问题是:
一种方法是转换df_in为 Python 字典,它可以更好地使用copy:
def pop(df_in):
df = pd.DataFrame(copy.deepcopy(df_in.to_dict()) )
print(df['sets'].apply(lambda x: set([x.pop()])))
for i in range(3): pop(df)
Run Code Online (Sandbox Code Playgroud)
输出:
0 {1}
Name: sets, dtype: object
0 {1}
Name: sets, dtype: object
0 {1}
Name: sets, dtype: object
Run Code Online (Sandbox Code Playgroud)