python - 如何使用模式从字符串中提取数字?
问题描述
我在熊猫数据框中有以下十行。我想提取坐标,如 [49,49]、[31,78] 等(对于每一行)。
我尝试使用字符串提取,但我无法弄清楚模式。
这是我尝试过的。我不确定我是否理解这是如何工作的:
b 是数据框,位置是列
b.positions.str.extract("""[{'y': (\d+), 'x': (\d+)}],""")
[{'y': 49, 'x': 49}, {'y': 78, 'x': 31}]
[{'y': 78, 'x': 31}, {'y': 75, 'x': 51}]
[{'y': 75, 'x': 51}, {'y': 71, 'x': 35}]
[{'y': 71, 'x': 35}, {'y': 95, 'x': 41}]
[{'y': 95, 'x': 41}, {'y': 88, 'x': 72}]
[{'y': 88, 'x': 72}, {'y': 75, 'x': 77}]
[{'y': 25, 'x': 23}, {'y': 15, 'x': 39}]
[{'y': 15, 'x': 39}, {'y': 20, 'x': 33}]
[{'y': 85, 'x': 61}, {'y': 80, 'x': 67}]
[{'y': 80, 'x': 67}, {'y': 61, 'x': 59}]
[{'y': 61, 'x': 59}, {'y': 45, 'x': 45}]
解决方案
尝试str.extractall和命名的捕获组。假设保存字符串的源列名为col1,代码为:
df.col1.str.extractall(r"'y': (?P<y>\d+), 'x': (?P<x>\d+)")
对于您的样本数据,结果是:
y x
match
0 0 49 49
1 78 31
1 0 78 31
1 75 51
2 0 75 51
1 71 35
3 0 71 35
1 95 41
4 0 95 41
1 88 72
5 0 88 72
1 75 77
6 0 25 23
1 15 39
7 0 15 39
1 20 33
8 0 85 61
1 80 67
9 0 80 67
1 61 59
10 0 61 59
1 45 45
结果的 MultiIndex 中的第一级(未命名)是来自源行的索引。第二个级别(名为match)是当前行的匹配号,从0开始。
推荐阅读
- gradle - 使用 DialogFlow 和 Firebase 重复类错误 protobuf-java 和 protobuf-javalite
- c - C中的所有打印函数有什么区别?
- android - 没有服务器端,如果在点击 Playstore 直接应用程序链接时已安装,则打开 android 应用程序
- c++ - wxWidget 3.1 自行构建和安装导致链接问题:未定义对 `wxGLCanvasX11::~wxGLCanvasX11()' 的引用
- javascript - React 组件布局:如何让子组件分布均匀,占用空间?
- flutter - 在 Flutter 中复制 .m4a 音频文件需要哪些 FFMPEG 参数?
- math - 从中心线计算圆柱表面点
- nuxt.js - Nuxt js(2.15.7 ) i18n 添加 vue 插件加载器时(app.i18n.__onNavigate 不是函数)
- javascript - encodeURIComponent() 小写
- android - 样本颤动项目没有其他写它有gradle问题