【问题标题】:Removing a character from entire data frame从整个数据框中删除一个字符
【发布时间】:2017-06-27 09:16:34
【问题描述】:

我需要对 pandas 执行的一项常见操作是从 Excel 文件中读取表格,然后从所有字段中删除分号。这些列通常是混合数据类型,我在尝试执行以下操作时遇到了 AtributeError:

for col in cols_to_check:
    df[col] = df[col].map(lambda x: x.replace(';',''))

AttributeError: 'float' 对象没有属性 'replace'

当我在替换之前将其包装在 str() 中时,我遇到了 Unicode 字符问题,例如

for col in cols_to_check:
    df[col] = df[col].map(lambda x: str(x).replace(';',''))

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3: ordinal not in range(128)

在 excel 中这是一个非常简单的操作,只需将; 替换为空字符串即可。如何在 pandas 中对整个数据框进行类似的操作,而不考虑数据类型?还是我错过了什么?

【问题讨论】:

    标签: python string pandas replace


    【解决方案1】:

    您可以使用DataFrame.replace 并选择使用subset:

    df = pd.DataFrame({'A':[1,2,3],
                       'B':[4,5,6],
                       'C':['f;','d:','sda;sd'],
                       'D':['s','d;','d;p'],
                       'E':[5,3,6],
                       'F':[7,4,3]})
    
    print (df)
       A  B       C    D  E  F
    0  1  4      f;    s  5  7
    1  2  5      d:   d;  3  4
    2  3  6  sda;sd  d;p  6  3
    
    cols_to_check = ['C','D', 'E']
    
    print (df[cols_to_check])
            C    D  E
    0      f;    s  5
    1      d:   d;  3
    2  sda;sd  d;p  6
    
    df[cols_to_check] = df[cols_to_check].replace({';':''}, regex=True)
    print (df)
       A  B      C   D  E  F
    0  1  4      f   s  5  7
    1  2  5     d:   d  3  4
    2  3  6  sdasd  dp  6  3
    

    【讨论】:

    • 谢谢,这成功了!我缺少的是regex=True。没有它replace 搜索整个字符串而不是部分(与 excel 的匹配整个单元格内容选项相同)
    • 我建议对您的答案进行一些更新。在我的问题中,我提到我在列中混合了数据类型(不仅在列之间)。但是在您的示例中,您使用一致的数据类型。此外,您只检查带有字符串的列,但 df=df.replace({';':''}, regex=True) 也可以正常工作,即使您将其中一列更改为 ['a;',1.02,'b']
    • 是的,你是对的。我测试它,但我不检查它。
    • 我添加列 E 什么是 int 列。谢谢你的建议。
    • @jezrael 刚刚注意到此代码不适用于python-3.6,但适用于python-2.7。这是一个已知问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多