使用 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) 查找多个单词?