python - pandas 将项目添加到一系列列表数据类型
问题描述
如何正确地将单个项目添加到一系列列表数据类型中?我尝试制作副本并将项目添加到列表中,但此方法会影响原始数据框
这是我的代码:
df = pd.DataFrame({'num':[['one'],['three'],['five']]})
# make copy of original df
copy_df = df.copy()
# add 'thing' to every single list
copy_df.num.apply(lambda x: x.append('thing'))
# show results of copy_df
print(copy_df) # this will show [['one', 'thing'], ['three', 'things'], ...]
print(df) # this will also show [['one', 'thing'], ['three', 'things'], ...]
# WHY?
我的问题是:
- 为什么上面的方法也会在原始副本中添加元素?
- 有没有更好的方法将元素添加到一系列列表中?
解决方案
因为您正在复制数据框而不是数据框中的列表,所以内部系列仍然有来自原始数据框的列表的引用。
实现它的更好方法;
copy_df.num = copy_df.num.apply(lambda x: x + ['thing'])