首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在pandas中用NaN替换空白值(空白)

在pandas中用NaN替换空白值(空白)
EN

Stack Overflow用户
提问于 2012-11-19 06:22:39
回答 9查看 353.2K关注 0票数 217

我希望在Pandas数据帧中找到包含空格(任意大小)的所有值,并将这些值替换为NaNs。

有什么想法可以改进这一点吗?

基本上,我想把这个变成:

代码语言:javascript
复制
                   A    B    C
2000-01-01 -0.532681  foo    0
2000-01-02  1.490752  bar    1
2000-01-03 -1.387326  foo    2
2000-01-04  0.814772  baz     
2000-01-05 -0.222552         4
2000-01-06 -1.176781  qux     

如下所示:

代码语言:javascript
复制
                   A     B     C
2000-01-01 -0.532681   foo     0
2000-01-02  1.490752   bar     1
2000-01-03 -1.387326   foo     2
2000-01-04  0.814772   baz   NaN
2000-01-05 -0.222552   NaN     4
2000-01-06 -1.176781   qux   NaN

我已经设法用下面的代码做到了这一点,但是人是丑陋的。这不是Pythonic式的,我确信这也不是对熊猫的最有效的利用。我遍历每一列,并对列掩码进行布尔替换,该掩码是通过应用一个函数生成的,该函数对每个值执行正则搜索,并匹配空格。

代码语言:javascript
复制
for i in df.columns:
    df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None

通过只迭代可能包含空字符串的字段,可以对它进行一些优化:

代码语言:javascript
复制
if df[i].dtype == np.dtype('object')

但这并没有多大的进步

最后,这段代码将目标字符串设置为None,这适用于fillna()这样的Pandas函数,但是如果我可以直接插入NaN而不是None,那么对于完整性来说就更好了。

EN

回答 9

Stack Overflow用户

发布于 2012-11-19 07:15:17

这样如何:

代码语言:javascript
复制
d = d.applymap(lambda x: np.nan if isinstance(x, basestring) and x.isspace() else x)

applymap函数将一个函数应用于数据帧的每个单元。

票数 39
EN

Stack Overflow用户

发布于 2016-04-29 17:34:48

我这样做了:

代码语言:javascript
复制
df = df.apply(lambda x: x.str.strip()).replace('', np.nan)

代码语言:javascript
复制
df = df.apply(lambda x: x.str.strip() if isinstance(x, str) else x).replace('', np.nan)

您可以去掉所有字符串,然后用np.nan替换空字符串。

票数 27
EN

Stack Overflow用户

发布于 2018-01-08 00:07:40

如果要从CSV文件中导出数据,可以像下面这样简单:

代码语言:javascript
复制
df = pd.read_csv(file_csv, na_values=' ')

这将创建数据框并将空白值替换为Na

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13445241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档