我有一个包含三列的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('-','')
删除这些字符后,我不确定现在在那个地方插入了什么。
答案 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
替换所有长度为0
或1
的数据的另一种解决方案:
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)