python - 让 pandas fillna 持久化

标签 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 more 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 版本的错误?

最佳答案

默认情况下,fillna将返回填充的 DataFrame 并且不会“就地”对其进行处理,因此您必须这样做:

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

或者,您可以在调用时传递inplace=True,它就地工作,因此:

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

关于python - 让 pandas fillna 持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28410347/

相关文章:

python - 使用\copy 命令将 TSV 批量复制到 postgres

python - 使用 pandas 数据框按索引进行移位

Pandas Dataframe groupby 将标签包含在 numpy 数组中

python - 查找行中第一个 NaN 值的索引

python - 对象没有属性 'build_absolute_uri' - Django Rest Framework

python - 获取查询集的 OFFSET、LIMIT

python - 使用 Python 插入 MySQL 数据库时出现错误 ProgrammingError

python - Pandas :nan->无

python - Numpy - 直接使用 np.isnan 和在临时变量中保存 bool 值时的差异。多变的

python - 如何在 Python 中使用具有 'None' 值的 numpy?