我需要对 pandas 执行的一个常见操作是从 Excel 文件中读取表格,然后从所有字段中删除分号。这些列通常是混合数据类型,我在尝试执行以下操作时遇到了 AtributeError:
for col in cols_to_check:
df[col] = df[col].map(lambda x: x.replace(';',''))
AttributeError: 'float' object has no attribute '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 中为整个数据帧做同样的事情,而不管数据类型?还是我遗漏了什么?
最佳答案
您可以使用 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
关于python - 从整个数据框中删除一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42135409/