上pandas.DataFrame.replace
該文檔說,你必須提供一個嵌套字典:在第一級是列名,你必須提供替代對一個秒字典。
所以,這應該工作:
>>> 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
編輯。似乎pandas
也接受非嵌套翻譯字典。在這種情況下,問題可能與字符編碼,特別是如果您使用Python 2。假設您的CSV負載功能正常解碼的文件的字符(如真正的Unicode代碼點),那麼你應該照顧你的翻譯/替換字典也與Unicode字符的定義是這樣的:如果你有一個
dictionary = {u'í': 'i', u'á': 'a'}
像這樣(和使用Python 2)的定義:
dictionary = {'í': 'i', 'á': 'a'}
那麼該字典中的實際鍵是多字節字符串。哪些字節(字符)它們是取決於所使用的實際源文件的字符編碼,但假設你使用UTF-8,你會得到:
dictionary = {'\xc3\xa1': 'a', '\xc3\xad': 'i'}
這可以解釋爲什麼pandas
無法取代那些字符。因此,請務必在Python 2中使用Unicode文字:。
在另一方面,在Python 3,所有的字符串都是Unicode字符串,而不必在Python 3使用u
前綴(其實unicode
類型從Python 2中被重命名爲str
,老str
來自Python 2的Python 3現在是bytes
)。
你最初怎麼拉數據? CSV? –
是的。這是一個CSV。 df = pd.read_csv('file.csv',sep ='\ t',low_memory = False,encoding ='iso8859_15') –
它必須與編碼有關,因爲'df.replace(dictionary,regex = True )'的作品。 –