我有一个包含空单元格的数据框,希望将这些空单元格替换为NaN。
之前在论坛上提出的解决方案可以解决包含空格的情况:
df.replace(r'\s+',np.nan,regex=True)
但是当单元格为空时,此代码无法工作。是否有人有建议使用pandas代码来替换空单元格。
我认为这里最简单的方法是进行两次替换:
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
.replace(r'\s+( +\.)|#',np.nan,regex=True).replace('',np.nan))
- Guidodf.replace(r'\s+',np.nan,regex=True).replace('',np.nan)
把所有行(包括非空行)都替换成了 NaN! - mOna其他两个答案没有考虑到字符串中的所有字符。下面这个更好:
df.replace(r'\s+( +\.)|#',np.nan,regex=True).replace('',np.nan))
更多文档请参见:在 Pandas 中用 NaN 替换空值(空格)
( +\.)|#
是什么意思?顺便说一句,它运行得很好。 - Plasma|#
?这将我的数据框中所有的十六进制颜色 #000000
替换为 NaN。毕竟数据框中不可能有注释...更有可能是用于绘图的颜色。 - Claudiu Creangadf.replace(r'\s+|^$', np.nan, regex=True)
正如你已经看到的那样,如果你按照显而易见的方式使用replace()并将其替换为None,它会抛出一个错误:
df.replace('', None)
TypeError: cannot replace [''] with method pad on a DataFrame
import numpy as np
df.replace('', np.NaN)
虽然我不能百分之百确定在所有边缘情况下pd.NaN与np.NaN处理方式完全相同,但我没有遇到任何问题。fillna()函数可以正常工作,在数据库中用NULL代替np.NaN也可以正常工作,并且将NaN保存到csv文件中也可以正常工作。
(Pandas版本18.1)
df.replace(r'\s*',np.nan,regex=True)
。 - EdChumNaN
,请给我一点时间。 - EdChumdf.replace(r'\s+',np.nan,regex=True).replace('',np.nan)
。 - EdChum