让pandas fillna持久

时间:2015-02-09 12:55:39

标签: python pandas nan

我正在使用一些包含缺失数据的csv数据集,标记为Lücke

我按如下方式导入数据集:

MyData=pd.read_csv('filename.csv',sep=';',skiprows=19,index_col='Date',dayfirst=True,parse_dates=True, na_values='L\xfccke')

按预期工作,将Lücke变为更熟悉的 NaN

看着它的尾部,我知道有一个Lücke,我得到以下,如预期的那样:

                     level
Date                      
2011-12-28 07:00:00    0.0
2011-12-29 07:00:00    0.0
2011-12-30 07:00:00    0.4
2011-12-31 07:00:00    0.0
2012-01-01 07:00:00    NaN

所以根据pandas文档(http://pandas.pydata.org/pandas-docs/stable/missing_data.html#filling-missing-values-fillna)一个简单的

In [23]: MyData.level.fillna(0)

应该诀窍。它的

Out [24]:
Date
...
2011-12-29 07:00:00       0.0
2011-12-30 07:00:00       0.4
2011-12-31 07:00:00       0.0
2012-01-01 07:00:00       0.0
Name: level, Length: 14976

似乎表明它确实有效。

但是继续,我总是遇到AttributeError: max must be larger than min in range parameter.错误,尝试使用plt.hist绘制直方图。

所以,检查一下,我运行了一个简单的MyData.tail()MyData.level.tail,他们都找到了我

                     level
Date                      
2011-12-28 07:00:00    0.0
2011-12-29 07:00:00    0.0
2011-12-30 07:00:00    0.4
2011-12-31 07:00:00    0.0
2012-01-01 07:00:00    NaN

那是从哪里来的?我是否误解了fillna,并且必须指出它实际应该真的替换NaN,而不仅仅是假装?

或者这是一些 pandas版本的错误?

1 个答案:

答案 0 :(得分:3)

默认情况下,fillna会返回填充的DataFrame,而不是“就地”处理它,因此您必须这样做:

MyData.level = MyData.level.fillna(0)

或者,您可以在调用时通过inplace=True就地工作,所以:

MyData.level.fillna(0, inplace=True)