【问题标题】:Replace all occurrences of a string in a pandas dataframe (Python)替换 pandas 数据框中所有出现的字符串 (Python)
【发布时间】:2022-12-03 04:22:32
【问题描述】:

我有一个大约有 20 列的熊猫数据框。

可以通过手动写入所有列名来替换所有出现的字符串(这里是换行符):

df['columnname1'] = df['columnname1'].str.replace("\n","<br>")
df['columnname2'] = df['columnname2'].str.replace("\n","<br>")
df['columnname3'] = df['columnname3'].str.replace("\n","<br>")
...
df['columnname20'] = df['columnname20'].str.replace("\n","<br>")

不幸的是,这不起作用:

df = df.replace("\n","<br>")

还有其他更优雅的解决方案吗?

【问题讨论】:

    标签: python replace pandas dataframe


    【解决方案1】:

    您可以使用 replace 并将字符串传递给查找/替换为字典键/项:

    df.replace({'
    ': '<br>'}, regex=True)
    

    例如:

    >>> df = pd.DataFrame({'a': ['1
    ', '2
    ', '3'], 'b': ['4
    ', '5', '6
    ']})
    >>> df
       a    b
    0  1
      4
    
    1  2
      5
    2  3    6
    
    
    >>> df.replace({'
    ': '<br>'}, regex=True)
       a      b
    0  1<br>  4<br>
    1  2<br>  5
    2  3      6<br>
    

    请注意,此方法默认返回一个新的 DataFrame 实例(它不会修改原始实例),因此您需要重新分配输出:

    df = df.replace({'
    ': '<br>'}, regex=True)
    

    或指定inplace=True:

    df.replace({'
    ': '<br>'}, regex=True, inplace=True)
    

    【讨论】:

    • 这对我不起作用!熊猫版本“0.15.1”,python 2.7.9,Ubuntu 14.04。
    • Python 2.7.9 |Anaconda 2.1.0 (64-bit)| (default, Mar 9 2015, 16:20:48) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2 Type "help", "copyright", "credits" or "license" for more information. Anaconda is brought to you by Continuum Analytics. Please check out: http://continuum.io/thanks and https://binstar.org >>> import pandas as pd >>> df = pd.DataFrame({'a': ['1 ', '2 ', '3'], 'b': ['4 ', '5', '6 ']}) >>> df a b 0 1 4 1 2 5 2 3 6 >>> df.replace({' ': '<br>'}) a b 0 1 4 1 2 5 2 3 6 >>>
    • 为什么当我做 df.replace({'...': 'stuff'}, regex=True) 时,它不仅替换了 '...',还替换了所有字符串? % ... 留下数字 ...
    • 使用反斜杠字面匹配字符,使用 {n} 量化。因此:df.replace('.{3}', 'stuff', regex=True)
    • @ShaneS:它对我来说仍然很好用(Python 3.10,pandas 1.4.2)。与您突出显示的方法的唯一区别是 df.replace({' ': '<br>'}, regex=True) 返回一个新的 DataFrame 对象,而不是更新原始 DataFrame 上的列。所以你需要重新分配输出,例如df = df.replace({' ': '<br>'}, regex=True)。
    【解决方案2】:

    Pandas 似乎更改了其 API 以避免在处理正则表达式时出现歧义。现在你应该使用:

    df.replace({'
    ': '<br>'}, regex=True)
    

    例如:

    >>> df = pd.DataFrame({'a': ['1
    ', '2
    ', '3'], 'b': ['4
    ', '5', '6
    ']})
    >>> df
       a    b
    0  1
      4
    
    1  2
      5
    2  3    6
    
    
    >>> df.replace({'
    ': '<br>'}, regex=True)
       a      b
    0  1<br>  4<br>
    1  2<br>  5
    2  3      6<br>
    

    【讨论】:

    【解决方案3】:

    您可以遍历所有列并使用方法str.replace:

    for col in df.columns:
       df[col] = df[col].str.replace('
    ', '<br>')
    

    此方法默认使用正则表达式。

    【讨论】:

      【解决方案4】:

      这将删除所有换行符和不必要的空格。您可以编辑' '。加入指定替换字符

          df['columnname'] = [''.join(c.split()) for c in df['columnname'].astype(str)]
      

      【讨论】:

        猜你喜欢
        • 2015-05-30
        • 2014-10-31
        • 1970-01-01
        • 2013-06-11
        • 2012-12-30
        • 2018-07-11
        • 2012-08-01
        • 2021-10-23
        • 1970-01-01
        相关资源
        最近更新 更多