使用 str.extract 时,熊猫不会覆盖列字段

Posted

技术标签:

【中文标题】使用 str.extract 时,熊猫不会覆盖列字段【英文标题】:pandas don't overwrite column fields when use str.extract 【发布时间】:2020-06-16 08:37:25 【问题描述】:

我有一个如下所示的数据框:

11100501   bank name CTA CTE 014097729
11200502   AHORROS bank name 0550470100002042

我想根据大小写在新列中提取“CTA CTE”或“AHORROS”。

我正在尝试这个:

df['new_column'] = df['new_column'].str.extract(r'(CTA CTE)')
df['new_column'] = df['new_column'].str.extract(r'(AHORROS)')

但第二行代码将已经分配了所需“CTA CTE”的字段覆盖为“nan”

我可以通过行的迭代来做到这一点,但我正在寻找一种更熊猫和更有效的解决方案

【问题讨论】:

尝试在您的 str 提取中使用 OR 语句,该语句用管道 df['new_column'].str.extract(r'(CTA CTE)|'(AHORROS)) 表示 【参考方案1】:

假设你每行只能有这两个之一:

df['new_column'] = df['new_column'].str.replace(r'.*((AHORROS)|(CTA CTE))|(.*).*', r'\1', regex=True)

输出:

#original:
          x           new_column                 y
0  11100501    bank name CTA CTE         014097729
1  11200502    AHORROS bank name  0550470100002042
2        23  something something              4678

#after replacement:
          x new_column                 y
0  11100501    CTA CTE         014097729
1  11200502    AHORROS  0550470100002042
2        23                         4678

【讨论】:

Grzegorz Skibinski,这似乎可行,但我有其他行没有“AHORROS”或“CTA CTE”,我想在这种情况下将新列创建为空值或 nan 值。有什么建议吗?另外,如果您能向我解释 r'\1' 参数的含义,那就太好了!谢谢 调整了我的答案 - r'\1' 是表示“让我第 1 组”的正则表达式 - 组用方括号表示,它们通常从左到右迭代,从从最外到最内(您可以尝试使用 python 的re 来更好地掌握正则表达式)

以上是关于使用 str.extract 时,熊猫不会覆盖列字段的主要内容,如果未能解决你的问题,请参考以下文章

了解熊猫系列提取函数中的正则表达式

Pandas str.extract:AttributeError:'str'对象没有属性'str'

使用 df['var'].str.extract() (Python) 查找多个单词?

str.extract() 与正则表达式

如何为 Pandas RE .str.extract() 使用 RE OR Operand

Python pandas str.extract 从多列