regex 从包含某些子字符串的字符串列中提取数字

xxhby3vn  于 2023-01-18  发布在  其他
关注(0)|答案(3)|浏览(160)

我要从Work_Experience列中提取另一列中的数字

**Work_Experience**  
3 Month  
7 month  
11 Months  
8 months  
0

我正在寻找以下输出:

**Work_Experience**  ||   **Output**  
3 Month                   3  
7 month                   7  
11 Months                 11  
8 months                  8  
0                         0

我就是这么试的

Experian_P2['Output'] = Experian_P2['Work_Experience'].str.contains('|'.join(['month', 'Month','months','Months'])).str.extract("(\d{1,2})")
nbysray5

nbysray51#

您可以使用

df['Output'] = df['Work_Experience'].str.extract(r'(?i)(\d+)\s*month').fillna(0)
  • 图案详情 *:
  • (?i)-不区分大小写匹配
  • (\d+)-第1组:一个或多个数字
  • \s*-零个或多个空格
  • month-month字符串。
nhaq1z21

nhaq1z212#

如果你知道第一部分总是一个数字,你可以试试这个简单的代码片段

a = ['3 Month', '7 month', '11 Months', '8 months', '0']

for x in a:
    parts = x.split(' ')

    print (x, int(parts[0]))
zed5wv10

zed5wv103#

这里假设pandas
你的命令并没有真正意义,因为你用管道传输一个命令来生成一个boolean Series,然后试图从中提取文本:

Experian_P2['Work_Experience'].str.contains('|'.join(['month', 'Month','months','Months'])).str.extract("(\d{1,2})"

我认为您需要在此子集上切片extract

m = Experian_P2['Work_Experience'].str.contains('months?', case=False)

Experian_P2.loc[m, 'Output'] = Experian_P2.loc[m, 'Work_Experience'].str.extract("(\d{1,2})", expand=False)

相关问题