首页 > 解决方案 > 在熊猫数据框中的某些字符之后提取数字

问题描述

我有一个数据框,其中一列包含'weak=30'类型字符串,我想提取=字符串后的数字并创建名为digits.

re.search用来查找数字,但到目前为止它给出了一个错误。

示例数据

import pandas as pd
import re

raw_data = {'patient': [1, 2, 3,4, 6],
        'treatment': [0, 1, 0, 1, 0],
        'score': ['strong=42', 'weak=30', 'weak=12', 'pitt=12', 'strong=42']}

df = pd.DataFrame(raw_data, columns = ['patient', 'treatment', 'score'])

df

   patient  treatment      score
0        1          0  strong=42
1        2          1    weak=30
2        3          0    weak=12
3        4          1    pitt=12
4        6          0  strong=42

所以我尝试了

df=df.assign(digits=[int(re.search(r'\d+', x)) for x in df.score])

TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“re.Match”

在R中你可以做

mutate(digits=as.numeric(gsub(".*=","",score))

中的等效功能是python pandas什么?

预期产出

   patient  treatment      score   digits
0        1          0  strong=42     42
1        2          1    weak=30     30
2        3          0    weak=12     12
3        4          1    pitt=12     12
4        6          0  strong=42     42

标签: pythonregexpandassearchextract

解决方案


您可以只使用str.replace您的 R 正则表达式:

df['digits'] = df['score'].str.replace(r'.*=', '').astype(int)

.*=模式尽可能多地匹配除换行符之外的所有 0+ 字符,直到最后一个=,并且replaceing with''删除此文本。

或者,您可以使用在=字符串末尾提取数字的方法:

df['digits'] = df['score'].str.extract(r'=(\d+)$', expand=False).astype(int)

在这里,=(\d+)$matches =,然后将任何一个或多个数字捕获到第 1 组,然后断言字符串末尾的位置。

两种情况下的输出都是:

>>> df
   patient  treatment      score  digits
0        1          0  strong=42      42
1        2          1    weak=30      30
2        3          0    weak=12      12
3        4          1    pitt=12      12
4        6          0  strong=42      42

推荐阅读