python - 在熊猫数据框中的某些字符之后提取数字
问题描述
我有一个数据框,其中一列包含'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
解决方案
您可以只使用str.replace
您的 R 正则表达式:
df['digits'] = df['score'].str.replace(r'.*=', '').astype(int)
该.*=
模式尽可能多地匹配除换行符之外的所有 0+ 字符,直到最后一个=
,并且replace
ing 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
推荐阅读
- linux - 是否可以启动一个进程来处理传入的 TCP 连接?
- mongodb - 如何将字符串字段数组更新为 MongoDB 中的对象数组?
- android - Firestore RecyclerView E/RecyclerView:未连接适配器;跳过布局
- ios - 为什么 reloadData() 不会刷新视图?
- swift - 无法转换类型“[String]?”的值 到预期的参数类型“字符串?” 快速显示结构中的图像时
- javascript - 使用 reduce 和 await 会给出不同的结果
- node.js - 如果您使用 HTTPS,Socket.io 是否安全?
- c++ - 用逗号分割字符串
- javascript - 为什么 Switch/Case 语法与 JavaScript 的其他部分如此不同?
- django - 标注 Mptt 模型的下降总数