问题描述:
在函数中传参为pandas对象时,如果想要修改pandas里面的值,采用以下方案:
pd.iloc[index][“colums”] = value
运行时将报“A value is trying to be set on a copy of a slice from a DataFrame”这个错误
问题原因:
pandas作为传参是不允许修改值的,我们可以通过深拷贝解决该错误
解决方案
方案1:
pd1 = pd.copy()
pd1.iloc[index][“colums”] = value
此方案有可能失效
方案2:
pd1 = pd.copy()
pd1.loc[pd1.index.values[index], “coimun”] = value
举例说明:
df = pd.DataFrame(np.random.randint(1,50,25).reshape(5,-1))
print(df1)
0 1 2 3 4
0 41 38 48 12 20
1 33 32 10 27 40
2 10 3 24 24 32
3 38 27 4 33 28
4 13 25 39 23 16
df1 = df.copy()
df1.iloc[0][0] = 0
print(df1)
0 1 2 3 4
0 0 39 18 22 24
1 30 43 13 38 8
2 15 12 11 36 38
3 45 5 47 11 33
4 37 46 39 15 21
df2 = df.copy()
df2.loc[df2.index.values[0],0] = 0 #pd.index.values获取pandas对象索引值
print(df2)
0 1 2 3 4
0 0 39 18 22 24
1 30 43 13 38 8
2 15 12 11 36 38
3 45 5 47 11 33
4 37 46 39 15 21
总结
1、在修改pandas对象值的时候如果报A value is trying to be set on a copy of a slice from a DataFrame该错误可以使用深拷贝解决此问题
2、获取pandas索引值的方式:pd.index.values