我有一个pandas Dataframe,它有46列,6行。
Index Column1 Column2 Column3 Column4 ... # Cant type all 46 columns.
2012 5626 fooo - barrr
2013 5655h booo - barr
2014 5626d zooo - -
LTM 56 gooo greed -
我是否可以通过此数据框并将所有-
值更新为0
或null
值?
我试过了:
for zzz in df.columns: # since df.columns will return me the names of the columns
if df_final[zzz].any() == '-':
df_final[zzz] = 0
print(df_final)
然而,这只是将所有内容打印出来。它不会将-
转换为0 / null
答案 0 :(得分:4)
使用replace
将该特定值替换为另一个值:
In [71]:
df.replace('-',0, inplace=True)
df
Out[71]:
Index Column1 Column2 Column3 Column4
0 2012 5626 fooo 0 barrr
1 2013 5655h booo 0 barr
2 2014 5626d zooo 0 0
3 LTM 56 gooo greed 0
你的代码即使它能够工作也是错误的语义:
for zzz in df.columns:
if df_final[zzz].any() == '-':
df_final[zzz] = 0
print(df_final)
这个:df_final[zzz] = 0
会更新整个专栏
如果你的代码是:
for zzz in df.columns:
if df_final[zzz].any() == '-':
df_final[zzz] = df_final[zzz].replace('-',0)
print(df_final)
那么这只会替换符合条件的行,您也可以这样做:
df.apply(lambda x: x.replace('-',0))
用于更紧凑的方法
编辑如果您想要替换为NaN
,请通过上面的np.NaN
代替0
。
答案 1 :(得分:3)
您可以使用replace
:
print (df.replace({'-': 0}))
Index Column1 Column2 Column3 Column4
0 2012 5626 fooo 0 barrr
1 2013 5655h booo 0 barr
2 2014 5626d zooo 0 0
3 LTM 56 gooo greed 0