![](/img/trans.png)
[英]Finding multiple exact string matches in a dataframe column using PANDAS
[英]finding all regex matches from a pandas dataframe column
我正在嘗試從數據框中提取一些數據,但是以下查詢僅提取第一個匹配項,而忽略其余匹配項,例如,如果整個數據為:
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,所以在我將Pandas更新到0.19之前,extractall才對我不起作用,所以如果您遇到Extractall的問題,請記住檢查您的熊貓版本...第二,apply(','。join)沒有之所以為我工作,是因為我有一些非字符串值(Null值),並且它無法處理它,所以我使用了Lambda,最后對MaxU解決方案進行了少量修改。
x['value'].str.extractall(r'(\d{3})').unstack().apply(lambda x:','.join(x.dropna()), axis=1)
您可以使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.