2017-08-09 72 views
1

所以,我有這個巨大的DF,它編碼在iso8859_15。替換熊貓數據框中的特殊字符

我有幾列包含巴西的名字和地方,所以其中一些列包含特殊字符,如「í」或「Ô」。

我有鑰匙,以取代他們的字典{ 'I': '我', 'A': 'A',...}

我試圖取代它一對夫婦的方式(如下圖) ,但他們都沒有工作。

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

另外:

df.udpate(pd.Series(dic)) 

他們誰也不期望輸出,這將是字符串,例如「尼古拉斯」成爲「NICOLAS」。

幫助?

+0

你最初怎麼拉數據? CSV? –

+0

是的。這是一個CSV。 df = pd.read_csv('file.csv',sep ='\ t',low_memory = False,encoding ='iso8859_15') –

+0

它必須與編碼有關,因爲'df.replace(dictionary,regex = True )'的作品。 –

回答

1

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)。

+0

嗯,不是必要的 - 刪除嵌套字典和相同的結果。我認爲有一些編碼問題:( – jezrael

+0

嗯,你是對的,它似乎工作..但他們不說在文檔中它必須是一個嵌套的字典? – randomir

+0

嵌套列表使用,如果只需要替換列'a'和列'b'都不能被替換,所以替代子集就像'df [['a']] = df [['a']]。replace(...)'可以使用嵌套字典 – jezrael

0

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 
+0

我試了兩種方法(有和沒有正則表達式=真,有和沒有就地=真)。他們都沒有工作:( –

+0

是輸出相同的輸入?或者它是不同的輸入,只是不是你所期望的? –

+0

@CameronTaylor - 你測試它在python2?[因爲](https:// stackoverflow .com/questions/45596529/replacement-special-characters-in-pandas-dataframe#comment78153592_45596654) – jezrael