2017-04-21 3 views
1

私はpandasを初めて使っています。私はxlsxファイルを読んで、最初の列をdictのキーに変換し、2番目の列をpandasを使ってdictの値に変換する必要があります。私もヘッダーである最初の行をスキップ/除外する必要があります。pandas:xlsxファイルを読んで、column1をキーとして、column2を値として

回答herepymysqlです。herecsvです。私はユーザーpandasに必要です。ここで

は、サンプルのデータが

dict_key dict_value 
key1  str_value1 
key2  str_value2 
key3   None 
key4   int_value3 

私のコード今のところ、以下のようである優れています。

import pandas as pd 

excel_file = "file.xlsx" 
xls = pd.ExcelFile(excel_file) 
df = xls.parse(xls.sheet_names[0], skiprows=1, index_col=None, na_values=['None']) 
data_dict = df.to_dict() 

ただし、キーは列番号で、値はcolumn1データとcolumn2データの両方です。私が持っていると思い何

>>> data_dict 
{u'Chg_Parms': {0: u' key1 ', 1: u' key2 ', 2: u' key3 ', 3: u' key4 ', 4: u' str_value1 ', 
       5: u' str_value2 ', 6: u' Nan ', 6: u' int_value3 '}} 

は、あなたの助けのためNone

data_dict = {'key1': 'str_value1', 'key2': 'str_value2', 'key3': None, 'key4': int_value3} 

おかげで置き換えもNaN column1の値として、キーと列の二つのデータなどのデータとです。

答えて

1

collections.OrderedDictを使用すると、キーを順番に保持できます。最初にpd.read_excelが最初のシートを読み込むことに注意してください。編集:あなたは

import collections as co 
import pandas as pd 

df = pd.read_excel('file.xlsx') 
df = df.where(pd.notnull(df), None) 
od = co.OrderedDict((k.strip().encode('utf8'),v.strip().encode('utf8')) 
        for (k,v) in df.values) 
...あなたが辞書にアイテムをエンコードし、 Noneなど 'None'を評価したいと言う結果:

>>> od 
OrderedDict([(u'key1', u'str_value1'), (u'key2', u'str_value2'), (u'key3', u'None'), (u'key4', u'int_value3')]) 

一般的な注意事項:あなたはあなたの中にUnicode文字として文字列を維持する必要がありますPythonプログラム。

+0

は、あなたが上に書いたように、次のコードは、あなたの期待される結果を与える必要があります構築であるexample.xlsxという名前のxlsxファイルを考えます。これは間違いなく私に必要なものに向かっている。ただし、各キー値を非Unicode表現に変換し、空白を取り除き、その型を維持するにはどうすればよいですか。たとえば。 str(u '1')の結果は '1'にな​​り、str(u'None ')は' None 'になります。私は 'int'と' boolean'値がそのまま必要です。 –

+0

@Anil_M:大歓迎です。編集された回答をご覧ください。 – bernie

+0

私は空白を世話するためにencode( 'utf8')の横に.strip()を追加しました。私は私の質問に答えることを信じます。ありがとう。 –

2

pandas read_excelメソッドを使用すると、Excelファイルをより便利に読むことができます。インデックスであるxlsxの列を定義できるindex_col引数を渡すことができます。

NaNをNoneに変更する方法については、questionで説明しています。 ANSのためのバーニー感謝@

import pandas as pd 

df = pd.read_excel("example.xlsx", index_col=0) 
df = df.where(pd.notnull(df), None) 

print df.to_dict()["dict_value"] 
+0

'df = df.where(pd.notnull(df)、None)' nice one、+1 – bernie

関連する問題