在pandas数据帧中用NAN替换空格

时间:2016-06-15 13:39:15

标签: python pandas ipython

我有一个包含三列的pandas数据框:

Name        Name2           DateTime
                            2016-06-10 05:22
                            2016-06-10 05:23
                            2016-06-10 14:25
Guest       Guest1          2016-06-10 15:32

我必须用NAN替换空格。因此,行1,2,3和4的AccountName和AccountName2应为NAN。我尝试了以下声明:

 df3['Name'] = df3['Name'].replace(r'[^\s+]',np.nan, regex=True)

但是因为我在#34; Guest"之后有空格。在Name中,所有5行都被NAN替换。

编辑:

这是我们的实际数据。

Name              Name2                  DateTime
\t\t-\r\n\t      \t\t-\r\n\t            2016-06-10 05:22
\t\t-\r\n\t      \t\t-\r\n\t            2016-06-10 05:23
\t\t-\r\n\t      \t\t-\r\n\t            2016-06-10 14:25
\t\tGuest\r\n\t  \t\tGuest1\r\n\t       2016-06-10 15:32

我用它来删除那些转义字符。

df['Name'] = df['Name'].str.replace('\r','').str.replace('\t','').str.replace('\n','').str.replace('-','')

删除这些字符后,我不确定现在在那个地方插入了什么。

3 个答案:

答案 0 :(得分:1)

由于你不需要空格,这应该有效。

df3['Name'] = df3['Name'].replace('[\s]+',"", regex=True) #Gets rid of all blank spaces
df3['Name'] = df3['Name'].replace('',np.nan, regex=True) #Replace completely empty cells with nan

答案 1 :(得分:1)

找到length数据,然后boolean indexing替换所有长度为01的数据的另一种解决方案:

print (df.applymap(len))
   Name  Name2  DateTime
0     0      0        16
1     0      0        16
2     0      0        16
3     5      6        16

df[df.applymap(len) < 2] = np.nan
print (df)
    Name   Name2          DateTime
0    NaN     NaN  2016-06-10 05:22
1    NaN     NaN  2016-06-10 05:23
2    NaN     NaN  2016-06-10 14:25
3  Guest  Guest1  2016-06-10 15:32

答案 2 :(得分:0)

如果您确定名称之间不存在空格,则可以使用.strip()删除字符串末尾的任何空格(或其他任何内容)。

 df3['Name'] = df3['Name'].strip().replace(r'[^\s+]',np.nan, regex=True)