Python:Pandas导致无效的比较类型

时间:2017-09-26 10:31:36

标签: python pandas

我有两种需要纠正的错误数据。一个是null,一个是Nan。

 >>> df_new
          Volume Price   
Date
2017-01-01 500  760
2017-01-02 null 760
2017-01-03 50   770
2017-01-04 null 780

另一种类型是使用NaN

 >>> df_new
          Volume Price   
Date
2017-01-01 500  760
2017-01-02 NaN 760
2017-01-03 50  770
2017-01-04 NaN 780

如何用0替换null和NaN数据? 我的代码无论是null还是NaN都可以工作,但我不能同时使用

volume = df_new['Volume'] == 'null' or df_new['Volume'].isnull()
df_new.loc[volume,'Volume'] = 0
df_new.replace('null',np.NaN,inplace=True)
df_new.iloc[0].fillna(df_new.iloc[1].Open,inplace=True)

它返回错误

  

回溯(最近一次呼叫最后一次):文件"",第1行,in     文件   " /home/.local/lib/python2.7/site-packages/pandas/core/ops.py" ;, line   763,在包装器中res = na_op(values,other)文件   " /home/.local/lib/python2.7/site-packages/pandas/core/ops.py" ;, line   718,在na_op中引发TypeError("无效的类型比较")TypeError:   无效的类型比较

代码将在volume = df_new['Volume'] == 'null'时有效,但这不会纠正数据,因为它是NaN,并且重新为0

1 个答案:

答案 0 :(得分:1)

使用replace替换nullfillna替换NaNNone s:

df['Volume'] = df['Volume'].replace('null', np.nan).fillna(0)

或者:

df['Volume'] = df['Volume'].replace('null', 0).fillna(0)

对于检测nullNaN,为按位|和括号添加or

volume = (df_new['Volume'] == 'null') | (df_new['Volume'].isnull())