【问题标题】:Using regex and pandas in the DataFrame to replace the value在 DataFrame 中使用 regex 和 pandas 替换值
【发布时间】:2021-06-14 01:14:09
【问题描述】:
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

【问题讨论】:

  • 你如何确定它应该是acne?它是对特定单词的匹配还是只是| 上的第一个拆分?
  • @ALollz 是的,它应该被视为简单的第一次拆分 |

标签: python regex pandas dataframe replace


【解决方案1】:

尝试使用带有 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]

输出:

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

【讨论】:

  • 嗨斯科特!不错的答案只是一个小的优化提示可能是我们可以使用布尔掩码仅对列E1 的感兴趣部分进行切片,以避免拆分整个列:)
  • @ShubhamSharma 是的,你是对的。请随时使用您的姓名编辑解决方案和文档。好主意!
  • 编辑了答案!
猜你喜欢
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2014-06-12
相关资源
最近更新 更多