pandas dataframe用NaN替换空白

时间:2015-05-22 09:10:36

标签: string pandas na

我有一个带有空单元格的数据框,并希望用NaN替换这些空单元格。 此论坛之前提出的解决方案有效,但仅限于单元格包含空格:

df.replace(r'\s+',np.nan,regex=True)

当单元格为空时,此代码不起作用。是否有人建议使用熊猫代码来替换空单元格。

Wannes

4 个答案:

答案 0 :(得分:8)

我认为最简单的方法是更换两次:

In [117]:
df = pd.DataFrame({'a':['',' ','asasd']})
df

Out[117]:
       a
0       
1       
2  asasd

In [118]:
df.replace(r'\s+',np.nan,regex=True).replace('',np.nan)

Out[118]:
       a
0    NaN
1    NaN
2  asasd

答案 1 :(得分:3)

其他两个答案都没有考虑字符串中的所有字符。这样更好:

df.replace(r'\s+( +\.)|#',np.nan,regex=True).replace('',np.nan))

更多文档:Replacing blank values (white space) with NaN in pandas

答案 2 :(得分:1)

这个怎么样?

df.replace(r'\s+|^$', np.nan, regex=True)

答案 3 :(得分:1)

正如您已经看到的那样,如果你做了明显的事情并用None替换()它会抛出一个错误:

df.replace('', None)
TypeError: cannot replace [''] with method pad on a DataFrame

解决方案似乎是简单地用numpy的NaN替换空字符串。

import numpy as np
df.replace('', np.NaN)

虽然我并非100%确定pd.NaN在所有边缘情况下的处理方式与np.NaN完全相同,但我没有遇到任何问题。 fillna()工作,持久化NULL到数据库代替np.NaN工作,持久化NaN到csv工作。

(熊猫版本18.1)