我有一个带有空单元格的数据框,并希望用NaN替换这些空单元格。 此论坛之前提出的解决方案有效,但仅限于单元格包含空格:
df.replace(r'\s+',np.nan,regex=True)
当单元格为空时,此代码不起作用。是否有人建议使用熊猫代码来替换空单元格。
Wannes
答案 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)