2017-05-17 11 views
0

私はPython 2.7を使用して、pd.read_excel(my_path, encoding="utf-8")というmy_readerという名前のpandas DataFrameを作成しました。列の1つに「Descrição」という名前が付けられています。pd.DataFrameのインデックスとしてUnicode文字列を使用するにはどうすればよいですか?

すべての列名はclient_listというリストにあります。

私はmy_reader指標としての私のリストのデータを使用しようとしている、私はそれは英語のみの文字を含むすべての他のデータと正常に動作エラー

KeyError: 'Descri\xc3\xa7\xc3\xa3o' 

を取得します。私はclient_listを印刷するとき、私は名前が正しく

print client_list[0] 
Descrição 

しかし

client_list[0] 
'Descri\xc3\xa7\xc3\xa3o' 

を表示しますだから私は

my_reader[client_list[i]] 

任意のアイデアを使用することはできませんか?

おかげ

答えて

0

列名のリストは、utf-8エンコーディングでstrの一覧です。しかし、パンダの列にはunicodeの文字列があるので、最も簡単な解決策は列名のリストをunicodeに "デコード"することです。

client_list = [ c.decode("utf8") for c in client_list ] 

私はあなたのデータフレームの中に見ることはできませんが、私はすべての列だけでなく、非ASCIIのものは、unicode文字列であることを賭けます。他のカラム名が問題にならない理由は、Python 2が背後で多くの暗黙の変換をしていることです(そして、pandasは多分独自のものを追加します)。 ASCII文字列の場合、strunicodeの間のマッピングは簡単ですが、ASCII以外のものはエンコーディングに依存します。だから、名前のリスト全体をUnicodeに変換するだけです。 ASCII以外のデータを扱うことがあるアプリケーションで推奨されているように、すべてのテキスト処理をUnicodeに移行することをお勧めします。

あなたの苦境に対するより良い解決策は、Python 3に切り替えることです。非ASCIIエンコーディングの扱いははるかに直観的で堅牢です。コードが「うまくいく」ことがわかりますそれはPython 3の下で私のためにしました。

+0

python 3に切り替えるとすべてが機能しました – costisst

+0

これはどのくらいの頻度で発生しますか:-) – alexis

0

あなたは、あなたがデータを取得することができ、より良い"utf-8"でそれをデコードし、データフレームのインデックスとして'Descri\xc3\xa7\xc3\xa3o'を使用するときあなたのデータフレームは、encoding="utf-8"で保存されます。たとえば:

import pandas as pd 
my_reader = pd.read_excel('comparison.xlsx',encoding="utf-8") 
my_reader 

my_readerは次のようになります。

あなたが使用することができます
Col_1 Col_2 file Descrição 
0 Abc  Abk  cnl  DFSDF 
1 Nck  Nck  Abk  DSFAF 
2 xkl  cnl  Abc  FDAS 
3 mzn  mzn  NaN  DFAS 

my_reader['Descrição'.decode('utf-8')] 

これはあなたの結果得られます。他の列のために

0 DFSDF 
1 DSFAF 
2  FDAS 
3  DFAS 
Name: Descrição, dtype: object 

あなたをでトレースすることもできます:

my_reader['Col_2'.decode("utf-8")] 

出力:

0 Abk 
1  Nck 
2  cnl 
3  mzn 
Name: Col_2, dtype: object 
+0

他のすべての列はエンコードされたままにしておきます。デコードする必要があるときは、どのように判断すればよいですか? – costisst

+0

それを解読しても大丈夫ですが、結果を得ることもできます。 –

+0

これは 'unicode'にデコードし、' unicode'ですべてのインデックスをトレースします –

関連する問題