【问题标题】:Replace all occurrences of a string in a pandas dataframe (Python)替换熊猫数据框中所有出现的字符串(Python)
【发布时间】:2014-10-31 03:57:09
【问题描述】:

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

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

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({'\n': '<br>'}, regex=True)
    

    例如:

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

    【讨论】:

    • 这对我不起作用!熊猫版本'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 &gt;&gt;&gt; import pandas as pd &gt;&gt;&gt; df = pd.DataFrame({'a': ['1\n', '2\n', '3'], 'b': ['4\n', '5', '6\n']}) &gt;&gt;&gt; df a b 0 1\n 4\n 1 2\n 5 2 3 6\n &gt;&gt;&gt; df.replace({'\n': '&lt;br&gt;'}) a b 0 1\n 4\n 1 2\n 5 2 3 6\n &gt;&gt;&gt;
    • 为什么当我使用df.replace({'...': 'stuff'}, regex=True) 时,它不仅替换了“...”,还替换了所有字符串? %\ ... 留下了数字 tho ...
    • @Raksha - 在正则表达式中,'。'匹配任何字符! (行终止符除外。)
    • 使用反斜杠从字面上匹配一个字符,使用 {n} 来量化。因此:df.replace('\.{3}', 'stuff', regex=True)
    【解决方案2】:

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

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

    例如:

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

    【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-05-13
        • 2021-09-07
        • 2022-12-03
        • 2018-08-01
        • 2015-05-30
        • 2017-09-09
        • 2019-05-09
        • 2017-07-08
        相关资源
        最近更新 更多