簡體   English   中英

如何從 Python Pandas 中的 DataFrame 中的列中獲取字符串值?

[英]How to take part of string value from column in DataFrame in Python Pandas?

我在 Python Pandas 中有 DataFrame,如下所示(“col1”是字符串數據類型):

col1
-------
ACC_P:Indiv|ACC_K:3886|GROUP:gr1|COK:P1K
ACC_P:Group|ACC_K:42|GROUP:gr2|COK:P1C
ACC_P:Indiv|ACC_K:455|GROUP:gpk22|COK:AD2
...

我需要創建新列“col2”,其中只有“GROUP:”和“|”之間的值來自“col1”中的值,因此我需要以下內容:

col1                                        | col2
--------------------------------------------|-------
ACC_P:Indiv|ACC_K:3886|GROUP:gr1|COK:P1K    | gr1
ACC_P:Group|ACC_K:42|GROUP:gr2|COK:P1C      | gr2
ACC_P:Indiv|ACC_K:455|GROUP:gpk22|COK:AD2   | gpk22
...                                         | ...

如何在 Python Pandas 中做到這一點?

您可以使用正則表達式來提取它。 類似於在 GROUP 之后捕獲所有內容:直到 |

df['col2'] = df.col1.str.extract('GROUP:(.*)\|')

如果您不熟悉正則表達式,則另一個不太優雅但可能更直觀的選擇。

在 pipe 上拆分,從最后一個項目中取出第二個,拆分:並從中取出最后一個元素。 這當然只有在您的 col1 值的結構始終遵循相同格式時才有效。

df.col1.str.split('|').str[-2].str.split(':').str[-1]

Output

                                        col1   col2
0   ACC_P:Indiv|ACC_K:3886|GROUP:gr1|COK:P1K    gr1
1     ACC_P:Group|ACC_K:42|GROUP:gr2|COK:P1C    gr2
2  ACC_P:Indiv|ACC_K:455|GROUP:gpk22|COK:AD2  gpk22

更優雅的方法是通過正則表達式,但這是我的兩分錢:

d.col1.str.split('GROUP:').apply(lambda x: x[1].split('|')[0])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM