如果单元格包含' - ',pandas会更新数据帧值

时间:2016-08-09 09:15:05

标签: python pandas

我有一个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     -   

我是否可以通过此数据框并将所有-值更新为0null值?

我试过了:

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

2 个答案:

答案 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