2017-04-21 102 views
1

我是熊貓新手。我需要閱讀xlsx文件並使用pandas將第一列轉換爲字典和第二列的鍵值,作爲字典的值。我還需要跳過/排除第一行是標題。pandas:讀取xlsx文件,以第1列作爲鍵和第2列作爲值

答案here用於pymysqlhere用於csv。我需要用戶pandas

這裏是一個示例Excel數據

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

但是,它給了我字典,其中的鍵是列號和值都是列1數據以及列2數據。

>>> 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 '}} 

我想什麼已經是COLUMN1數據作爲關鍵和列兩個數據的值,也NaNNone

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

感謝您的幫助更換。

回答

1

您可以使用collections.OrderedDict來保持鍵的順序。您會注意到pd.read_excel默認加載第一張紙。編輯:那麼,你說你要在編碼字典中的項目,並評估'None'None ...

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) 

結果:

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

一般注意事項:請妥善保管字符串爲Unicode中的Python程序。

+0

@伯尼感謝。這絕對是我所需要的。但是,如何將每個鍵值轉換爲非unicode表示形式,去掉空白區域並保持其類型。例如。 str(u'1')的結果爲'1',str(u'None')的結果爲'None'。我需要'int'和'boolean'值。 –

+0

@Anil_M:你非常歡迎。請參閱編輯答案。 – bernie

+0

我在編碼('utf8')旁邊添加了.strip()來處理空白。我相信我的問題。謝謝。 –

2

您可以使用pandas read_excel方法更方便地讀取excel文件。您可以傳遞一個index_col參數,您可以在其中定義您的xlsx的哪一列是索引。

如何將NaN更改爲無,在此question中解釋。

鑑於稱爲example.xlsx一個XLSX文件,該文件是建立一個像你上面寫的,下面的代碼應該給你的預計業績:爲俺們

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

相關問題