替换pandas数据帧中的特殊字符

时间:2017-08-09 16:52:33

标签: python pandas

所以,我有这个巨大的DF,编码在iso8859_15。

我有一些列包含巴西的名称和地点,因此其中一些列包含特殊字符,例如“í”或“Ô”。

我有把钥匙替换成字典{''':'我','á':'a',...}

我尝试用两种方式替换它(下面),但它们都没有用。

df.replace(dictionary, regex=True, inplace=True) ###BOTH WITH AND WITHOUT REGEX AND REPLACE

此外:

df.udpate(pd.Series(dic))

他们都没有预期的输出,这对于像“NÍCOLAS”这样的字符串变成“NICOLAS”。

帮助?

3 个答案:

答案 0 :(得分:3)

pandas.DataFrame.replace上的文档说您必须提供嵌套字典第一级是列名,您必须为其提供带有替换对的第二个字典

所以,这应该有效:

Sub Button1_Click()

Dim ie As Object
Set ie = CreateObject("InternetExplorer.application")

With ie
    .Visible = True
    .Navigate ("google.com")

While .Busy
    DoEvents
Wend

Do Until ie.readyState = 4
    DoEvents
Loop

Application.Wait (Now + TimeValue("00:00:10")) ' Here I need to click on the reports...

End With
MsgBox ("Process completed")

End Sub

编辑。似乎>>> df=pd.DataFrame({'a': ['NÍCOLAS','asdč'], 'b': [3,4]}) >>> df a b 0 NÍCOLAS 3 1 asdč 4 >>> df.replace({'a': {'č': 'c', 'Í': 'I'}}, regex=True) a b 0 NICOLAS 3 1 asdc 4 也接受非嵌套翻译词典。在这种情况下,问题可能是字符编码,特别是如果您使用 Python 2 。假设您的CSV加载函数正确解码了文件字符(作为真正的Unicode代码点),那么您应该注意您的翻译/替换字典也使用Unicode字符定义,如下所示:

pandas

如果您有这样的定义(并使用Python 2):

dictionary = {u'í': 'i', u'á': 'a'}

然后该字典中的实际键是多字节字符串。它们的字节(字符)取决于所使用的实际源文件字符编码,但假设您使用UTF-8,您将得到:

dictionary = {'í': 'i', 'á': 'a'}

这可以解释为什么dictionary = {'\xc3\xa1': 'a', '\xc3\xad': 'i'} 无法取代这些字符。因此,请务必在Python 2中使用Unicode文字:pandas

另一方面,在Python 3中,所有字符串都是Unicode字符串,并且您不必使用u'this is unicode string'前缀(事实上,{2}中的u类型被重命名为{{ Python 3中的1}},Python 2中的旧unicode现在是Python 3中的str

答案 1 :(得分:3)

replace开箱即用,未指定Python 3中的特定列。

加载数据:

df=pd.read_csv('test.csv', sep=',', low_memory=False, encoding='iso8859_15')
df

结果:

col1    col2
0   he  hello
1   Nícolas shárk
2   welcome yes

创建词典:

dictionary = {'í':'i', 'á':'a'}

替换:

df.replace(dictionary, regex=True, inplace=True)

结果:

 col1   col2
0   he  hello
1   Nicolas shark
2   welcome yes

答案 2 :(得分:0)

如果有人收到以下错误消息

  

在位置2重复多次

尝试这个df.replace(dictionary, regex=False, inplace=True)

而不是 df.replace(dictionary, regex=True, inplace=True)