pandas 报警告:A value is trying to be set on a copy of a slice from a DataFrame

我在抽取了原来DataFrame数据的几列后,对抽取后的数据进行赋值操作时弹出这个警告。

这个警告的后果是可能导致修改pandas 单元格中的数据失败。

样例代码如下

# 弹出警告的代码
dfc = pd.DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7]})
dfc2 = dfc[['a']]
dfc2['a'][0] = 100

解决方法一

这个是深浅拷贝的警告

我对其进行一次深拷贝即可解决,这种方式可能会失效

# 不 弹出警告的代码
dfc = pd.DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7]})
dfc2 = dfc[['a']]
dfc2 = dfc2.copy() # 进行一次拷贝
dfc2['a'][0] = 100

解决方法二

换一种方式对 pandas 单元格进行修改

dfc = pd.DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7]})
dfc2 = dfc[['a','b']]
# 这个命令不会警告
dfc2.loc[3, 'b'] = 'english'

注意: loc 有一个很类似的api,即iloc ,但我在使用 dfc2.iloc[0][0] =111 修改单元格数据时弹出警告,而且修改数据失败。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐