簡體   English   中英

在 DataFrame 中使用正則表達式和 pandas 替換值

[英]Using regex and pandas in the DataFrame to replace the value

import pandas as pd
import re

regexdf_data = {
    'STag': ['Title_1', 'Abs_1', 'Abs_3', 'Abs_4'],
    'E1': ['pacnes', 'acne|dfe|sac', 'pI', 'kera'],
    'E1_CUI': ['C3477', 'C2166', 'C9871', 'C2567']
}
df3 = pd.DataFrame(regexdf_data)
df3

    E1             E1_CUI    STag
0   pacnes         C3477     Title_1
1   acne|dfe|sac   C2166     Abs_1
2   pI             C9871     Abs_3
3   kera           C2567     Abs_4

現在,當相應行的 STag 列中有 Abs_1 值時,我只想要 E1 列的痤瘡|dfe|sac 值代替 E1_CUI 列的 C2166 中的痤瘡。

我試過這個df3.loc[df3['STag'] == 'Abs_1', 'E1_CUI'] = re.split("\|",df3['E1'])但它不起作用。

Expected Output

    E1             E1_CUI    STag
0   pacnes         C3477     Title_1
1   acne|dfe|sac   acne      Abs_1
2   pI             C9871     Abs_3
3   kera           C2567     Abs_4

嘗試使用帶有 split 的字符串訪問器和第一個元素的 get 快捷方式(@ShubhamSharma 的改進):

import pandas as pd

regexdf_data = {
    'STag': ['Title_1', 'Abs_1', 'Abs_3', 'Abs_4'],
    'E1': ['pacnes', 'acne|dfe|sac', 'pI', 'kera'],
    'E1_CUI': ['C3477', 'C2166', 'C9871', 'C2567']
}

df3 = pd.DataFrame(regexdf_data)

m = df3['STag'] == 'Abs_1'
df3.loc[m, 'E1_CUI'] = df3.loc[m, 'E1'].str.split('|').str[0]

Output:

print(df3)

      STag            E1 E1_CUI
0  Title_1        pacnes  C3477
1    Abs_1  acne|dfe|sac   acne
2    Abs_3            pI  C9871
3    Abs_4          kera  C2567

暫無
暫無

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

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