所以,我有这个巨大的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”。
帮助?
答案 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)