我有一个包含文本数据的数据帧,我正在尝试清理内容值为空的行。我有一行的内容列如下所示:
articles.loc[197040, 'content']
' '
我尝试使用 .isnull(( 清理它,但这无法识别空字符串。所以我求助于正则表达式并尝试:
nothing = re.compile(r'W{1,}')
articles = articles[articles['content'] != nothing]
但这留下了空的文章。如果我尝试:
' ' == nothing
我得到False
.但是正则表达式测试器似乎表明这应该有效。使用r'W*'
也会返回False
。
其他无意义的字符串仍然存在问题---例如,当尝试其他正则表达式组合时---逗号和空格的混合。
感谢您的任何帮助。
编辑:
这里也没有认识到等效性:
'what.' == re.compile(r'w*.')
False
或在这里:
'6:45' == r'[^A-Z]{1,}'
False
等等等等。
您可以使用内置isspace
解决此问题,如果字符串中只有空格字符并且至少有一个字符,则返回 true。
演示,也过滤空字符串:
import pandas as pd
articles = pd.DataFrame({'content' : ['foo','bar',' ','foo',' ','']})
articles = articles[(~articles['content'].str.isspace()) & (articles['content'] != '')]
>>> articles
content
0 foo
1 bar
3 foo
要检查正则表达式是否与字符串匹配,您必须使用match方法,而不是检查相等性。你基本上是在比较一个字符串和一个模式对象,当然,模式对象是不相等的。试试这个:
nothing.match(' ') # out: <_sre.SRE_Match object; span=(0, 4), match=' '>
x.match(' , , ,') # out: <_sre.SRE_Match object; span=(0, 6), match=' , , ,'>