【问题标题】:Python: replace case insensitive flag doesn't workPython:替换不区分大小写的标志不起作用
【发布时间】:2021-09-25 14:22:56
【问题描述】:

在我的数据框中,我想用一个一致的字符串替换不同的表示方式。例子:

  1. 将 [COM, COMMERCIAL] 替换为“商业”。
  2. 将 [FALSE, False, false, NO, No, N] 替换为 N 等。

要替换的值列表和替换值来自另一个数据帧,并且会在我遍历主数据帧中的每一列时发生变化。

应该可行的理想解决方案是:

dfPA[col] = dfPA[col].replace(f'(?i){valold}', key)

where
valold = ['COM', 'COMMERCIAL']
key = 'Commercial'

这不起作用。也许是因为 valold 是一个列表。所以我尝试了:

for val in valold:
    dfPA[col] = dfPA[col].replace(f'(?i){val}', key)

还是不行。有什么想法吗?

注意:我不能使用dfPA[col] = dfPA[col].str.replace(valold, key, case=False, regex=False),因为正如here 解释的那样,它也会替换子字符串。然后我看到的不是“商业”,而是“ComCom ...商业”

【问题讨论】:

    标签: python pandas replace ignore-case


    【解决方案1】:

    str.replacereplace 可以使用。只需确保模式匹配整个单元格匹配字符串的开头 (^) 和结尾 ($)。

    str.replace:

    for val in valold:
        dfPA[col] = dfPA[col].str.replace(rf'^{val}$', key, case=False, regex=True)
    

    replace:

    for val in valold:
        dfPA[col] = dfPA[col].replace(rf'(?i)^{val}$', key, regex=True)
    

    *regex=False 默认为replace,因此regex 不区分大小写修饰符在不设置regex=True 的情况下将无法用于替换,因为它将逐字匹配字符“(?i)”。


    样本数据和输出:

    import pandas as pd
    
    dfPA = pd.DataFrame({
        'col': ['COM', 'COMMERCIAL', 'COmMErCIaL', 'Something else',
                'comical']
    })
    
    valold = ['COM', 'COMMERCIAL']
    key = 'Commercial'
    col = 'col'
    for val in valold:
        dfPA[col] = dfPA[col].str.replace(rf'^{val}$', key, case=False, regex=True)
    
    print(dfPA)
    
                  col
    0      Commercial
    1      Commercial
    2      Commercial
    3  Something else
    4         comical
    

    【讨论】:

    • 感谢这工作。如果您能回答,我有几个后续问题: 1. 在df[col].str.replacedf[col].replace 之间是一个比另一个更好吗? 2. 有什么好的资源来理解标志和修饰符吗?
    • 1.我不能说所有情况,因为大小和数据类型将在很大程度上决定这种类型的操作需要多长时间。但是,在我的测试中,它们的时间几乎完全相同。我猜它们的实现非常相似。 2. 我只是顺便使用regex,我不是该主题的资源的好来源。对不起。
    猜你喜欢
    • 2010-10-29
    • 2013-06-20
    • 2014-02-16
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 2017-07-19
    相关资源
    最近更新 更多