【发布时间】:2019-03-15 18:30:59
【问题描述】:
我正在尝试删除仅包含数字或仅包含字符的行。例如,下面是示例 pandas 数据框列:
col1:
business
served business
02446681
C96305407PLA
P0116711
在我的结果中,我需要以下值,因为第一行和第二行只包含字符,第三行只是数字。
col1:
C96305407PLA
P0116711
任何建议将不胜感激!
【问题讨论】:
我正在尝试删除仅包含数字或仅包含字符的行。例如,下面是示例 pandas 数据框列:
col1:
business
served business
02446681
C96305407PLA
P0116711
在我的结果中,我需要以下值,因为第一行和第二行只包含字符,第三行只是数字。
col1:
C96305407PLA
P0116711
任何建议将不胜感激!
【问题讨论】:
使用两个str.contains
df[df.business.str.contains('\d+')&df.business.str.contains('[A-Za-z]')]
Out[48]:
business
2 C96305407PLA
3 P0116711
【讨论】:
pandas.Series.str.contains 与正则表达式一起使用更简单的正则表达式,但允许使用'123 456' 的行,因为'3 ' 和' 4' 都满足该模式。
df[df.col1.str.contains('\d\D|\D\d')]
col1
3 C96305407PLA
4 P0116711
这通过显式强制模式仅在找到数字/alpha 或 alpha/digit 时才匹配,从而解决了上述正则表达式的缺点。
df[df.col1.str.contains('(?i)\d[a-z]|[a-z]\d')]
col1
3 C96305407PLA
4 P0116711
【讨论】:
str.extract 并删除不必要的行。
df['col1'].str.extract('([A-Za-z]+\d+)', expand = False).dropna()
3 C96305407
4 P0116711
【讨论】: