从整个数据框中删除字符

MJB*_*MJB 4 python string replace pandas

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

for col in cols_to_check:
    df[col] = df[col].map(lambda x: x.replace(';',''))
Run Code Online (Sandbox Code Playgroud)

AttributeError:“ float”对象没有属性“ replace”

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

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

UnicodeEncodeError:'ascii'编解码器无法在位置3编码字符u'\ xe9':序数不在范围内(128)

在excel中,这是一个非常简单的操作,只需;用一个空字符串替换即可。无论数据类型如何,我如何在整个数据帧中以类似的方式在熊猫中执行此操作?还是我错过了什么?

jez*_*ael 6

您可以使用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
Run Code Online (Sandbox Code Playgroud)

  • 我建议对您的答案进行一点更新。在我的问题中,我提到我在列中(不仅在列之间)混合了数据类型。但是在您的示例中,您使用一致的数据类型。此外,您只检查带有字符串的列,但 `df=df.replace({';':''}, regex=True)` 也能正常工作,即使您将其中一列更改为类似 `[' a;',1.02,'b']` (2认同)