【问题标题】:How to extract numbers from string using a pattern? [closed]如何使用模式从字符串中提取数字? [关闭]
【发布时间】:2020-07-12 06:03:01
【问题描述】:

我在 pandas 数据框中有以下十行。我想提取坐标,如 [49,49]、[31,78] 等(对于每一行)。

我尝试使用字符串提取,但无法找出模式。

这是我尝试过的。我不确定我是否理解这是如何工作的:

b 是数据框,positions 是列

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}]


【问题讨论】:

  • 您的列是字符串还是实际上是列表类型,每个列表中有 2 个字典?
  • df['col'].apply(lambda x: [i.values() for i in x])怎么样
  • 好吧,我正在使用 spyder,通过变量资源管理器,我选择了整个列,然后右键单击 -> 到 str,我想它已转换为字符串
  • “我尝试使用字符串提取” - 我们可以看到您的代码,编辑成问题吗?谢谢!
  • @anky_91 我得到:AttributeError: 'str' object has no attribute 'values'

标签: python string pandas design-patterns extract


【解决方案1】:

尝试 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开始。

【讨论】:

  • 谢谢。这太棒了!
猜你喜欢
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2011-10-08
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多