在尝试使用csv文件编码后,我决定执行手动替换某些字符的编码方法。
数据框的外观如下:
df = pd.DataFrame({'a' : 'bÉd encoded',
'b' : ['foo', 'bar'] * 3,
'c' : 'bÉd encoded too'})
a b c
0 bÉd encoded foo bÉd encoded too
1 bÉd encoded bar bÉd encoded too
2 bÉd encoded foo bÉd encoded too
3 bÉd encoded bar bÉd encoded too
4 bÉd encoded foo bÉd encoded too
5 bÉd encoded bar bÉd encoded too
如果我唯一的问题是列“ a”,则此功能就足够了:
def force_good_e(row):
col = row['a']
if 'É' in col:
col = col.replace('É','a')
return col
df['a'] = df.apply(force_good_e, axis=1)
但随后我需要为列'c'提供另一个功能
我对此有所改进
def force_good_es(row, column):
col = row[column]
if 'É' in col:
col = col.replace('É','a')
return col
df['a'] = df.apply(lambda x: force_good_es(x,'a'), axis=1)
df['c'] = df.apply(lambda x: force_good_es(x,'c'), axis=1)
但这让我想知道,还有更好的方法吗?
即无需制作一行
df[n] = df.apply(lambda x: force_good_es(x,n), axis=1)
每个需要修复的n列。
答案 0 :(得分:2)
您可以使用str.replace
df['a'] = df['a'].str.replace('É','a')
df['c'] = df['c'].str.replace('É','a')
或像评论中提到的@wen一样。
df = df.replace({'É':'a'},regex=True)
答案 1 :(得分:1)
如果该字符出现在所有列中,但您只想在选定的列中替换它,并且要使用apply
:
df.iloc[:,[0,2]].apply(lambda x: x.str.replace('É','a'), axis=1)
第一列和第三列中É
的出现将由a
代替。