我正在尝试从数据框中提取一些数据,但是在查询之后只提取第一个匹配并忽略其余匹配,例如,如果整个数据是:
df['value']=
0 123 blah blah blah, 456 blah blah blah, 129kfj blah blah
1 237 blah blah blah, 438 blah blah blah, 365kfj blah blah
...
和正则表达式是:
df['newCol']=df['value'].str.extract("[0-9]{3}")
我希望结果是一个新的列名" newCol"为:
newCol
------
123,456,129
237,438,365
...
但我得到的实际结果只是第一个数字:
newCol
------
123
237
这里有什么问题? :(
谢谢
更新
感谢MaxU我找到了解决方案,只是几个建议。我有Pandas 0.18.1所以我没有为我工作,直到我将熊猫更新到0.19,所以如果你有Extractall问题,请记得查看你的熊猫版本...第二,申请(',&# 39; .join)对我没用,因为我有一些非字符串值(Null值)并且它无法处理它所以我使用了Lambda,它最终使用了一个小的MaxU解决方案修改。 / p>
x['value'].str.extractall(r'(\d{3})').unstack().apply(lambda x:','.join(x.dropna()), axis=1)
答案 0 :(得分:4)
您可以使用Series.str.extractall()方法:
In [57]: x
Out[57]:
value
0 123 blah blah blah 456 blah blah blah 129kfj blah blah
1 237 blah blah blah 438 blah blah blah 365kfj blah blah
In [58]: x['newCol'] = x['value'].str.extractall(r'(\d{3})').unstack().apply(','.join, 1)
In [59]: x
Out[59]:
value newCol
0 123 blah blah blah 456 blah blah blah 129kfj blah blah 123,456,129
1 237 blah blah blah 438 blah blah blah 365kfj blah blah 237,438,365
<强>更新强>
In [77]: x
Out[77]:
value
0 123 blah blah blah, 456 blah blah blah, 129kfj blah blah
1 237 blah blah blah, 438 blah blah blah, 365kfj blah blah
In [78]: x['value'].str.extractall(r'(\d{3})').unstack().apply(','.join, 1)
Out[78]:
0 123,456,129
1 237,438,365
dtype: object