dataframe部分存在小于0的值 全部赋值为0

df第一列不要,其它列小于0的值 全赋为0
这种也是可以的
df.iloc[:,1:][df.iloc[:,1:] < 0] = 0

这个赋值我发现有问题
pandas == 1.0.5 是成功的,但是会warning赋值给了copy,在未来版本应该就会处理
pandas == 1.2.0 是失败的

正确的方法,我实验了下
1.
df_temp = df.iloc[:,1:-8]
df_temp[df_temp < 0] = 0
df.iloc[:,1:-8] = df_temp

2.
df_num = df._get_numeric_data()
df_num[df_num < 0] = 0
print(df_num)

第二种如果只考虑部分dataframe
df_num = df.iloc[:,1:-8]._get_numeric_data()
df_num[df_num < 0] = 0
print(df_num)
是不成功的,df.iloc[:,1:-8]生成的应该是个copy,似乎只有df.iloc[:,1:-8]在赋值左边才是引用

留言

熱門文章