【发布时间】:2020-08-20 20:53:58
【问题描述】:
我想从不遵循特定模式的 pandas 数据框中过滤字符串。但我只得到一个空的数据框
我的代码
l = ['Dubai', 'St. Petersburg', 'Aachen', '21323', '123134', 'Klaus@facebook.com']
l = pd.DataFrame(l)
pattern = re.compile("([A-Z])\w+|(\w[A-Z\u00E4-\u02AF])\w+", re.UNICODE)
df = l.filter(regex=pattern)
print(df)
输出:
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3, 4, 5]
预期输出:
0
0 Dubai
1 St. Petersburg
2 Aachen
3 None
4 None
5 None
【问题讨论】:
-
不确定 Pandas,但“St. Petersburg”与您的 RegEx 不匹配。您需要允许“\”。和 "\s"/" " 用于包含在内。
-
非常感谢您的帮助。很抱歉问,但我对正则表达式并没有那么复杂,并试图用你的建议进行测试,但不能让你帮我在哪里插入这些行?
-
我建议使用 regex101.com 来满足您的所有正则表达式需求。 (只要确保使用 Python Flavor)regex101.com/r/8c0Ij3/1 老实说 - 我不确定你的 RegEx 是“应该”找到的。你想让它做什么?
-
df.filter不会按照您的预期进行,它会过滤索引的数据框基本标签。来自文档:请注意,此例程不会根据其内容过滤数据框。过滤器应用于索引的标签。 -
@Changer 这个怎么样? regex101.com/r/N4dNaH/3 您可能需要在第一组 [A-Z] 中添加更多字符,因为它不包含任何非 ASCII 字符,例如 Ö 或 Ø