所以,我有一个巨大的DF,它编码在iso8859_15中。
我有一些列包含巴西的名字和地名,因此其中一些列包含特殊字符,如“I”或“Ô”。
我有钥匙可以在字典里替换它们{'I':'I','a':'a',…}
我试过几种方法来替换它(如下),但都没有成功。
df.replace(dictionary, regex=True, inplace=True) ###BOTH WITH AND WITHOUT REGEX AND REPLACE
另外:
df.udpate(pd.Series(dic))
他们中没有一个有预期的输出,那就是像“NÍCOLAS”这样的字符串变成“NICOLAS”。
帮忙?
^{} 上的文档指出,您必须提供一个嵌套字典:第一级是列名,您必须为其提供一个第二个带有替换对的字典。
所以,这应该管用:
编辑。似乎
pandas
也接受非嵌套翻译字典。在这种情况下,问题可能出在字符编码上,尤其是当您使用Python 2时。假设CSV加载函数正确解码了文件字符(作为真正的Unicode代码点),那么您应该注意您的翻译/替换字典也用Unicode字符定义,如下所示:如果您有这样的定义(并使用Python 2):
那么字典中的实际键是多字节字符串。它们是哪个字节(字符)取决于实际使用的源文件字符编码,但是假设您使用UTF-8,您将得到:
这就解释了为什么
pandas
不能替换那些字符。所以,一定要在Python 2中使用Unicode文本:u'this is unicode string'
。另一方面,在Python 3中,所有字符串都是Unicode字符串,您不必使用
u
前缀(实际上,Python 2中的unicode
类型在python3中被重命名为str
,而python2中的旧str
现在在python3中是bytes
)。replace
可以开箱即用,而不必在Python 3中指定特定的列。加载数据:
结果:
创建词典:
替换:
结果:
如果有人收到以下错误消息
试试这个
df.replace(dictionary, regex=False, inplace=True)
而不是
df.replace(dictionary, regex=True, inplace=True)
相关问题 更多 >
编程相关推荐