値から辞書を作成したいのですが、Excelセルから取得します。私のコードは以下です。
wb = xlrd.open_workbook('foo.xls')
sh = wb.sheet_by_index(2)
for i in range(138):
cell_value_class = sh.cell(i,2).value
cell_value_id = sh.cell(i,0).value
そして、以下のような、Excelセルからの値で構成される辞書を作成したいと思います。
{'class1': 1, 'class2': 3, 'class3': 4, 'classN':N}
この辞書を作成する方法についてのアイデアはありますか?
d = {}
wb = xlrd.open_workbook('foo.xls')
sh = wb.sheet_by_index(2)
for i in range(138):
cell_value_class = sh.cell(i,2).value
cell_value_id = sh.cell(i,0).value
d[cell_value_class] = cell_value_id
または、あなたは試すことができます pandas
from pandas import *
xls = ExcelFile('path_to_file.xls')
df = xls.parse(xls.sheet_names[0])
print df.to_dict()
このスクリプトを使用すると、Excelデータテーブルを辞書のリストに変換できます。
import xlrd
workbook = xlrd.open_workbook('foo.xls')
workbook = xlrd.open_workbook('foo.xls', on_demand = True)
worksheet = workbook.sheet_by_index(0)
first_row = [] # The row where we stock the name of the column
for col in range(worksheet.ncols):
first_row.append( worksheet.cell_value(0,col) )
# transform the workbook to a list of dictionaries
data =[]
for row in range(1, worksheet.nrows):
Elm = {}
for col in range(worksheet.ncols):
Elm[first_row[col]]=worksheet.cell_value(row,col)
data.append(Elm)
print data
これを行うには、Pandasを使用できます。pandasをインポートし、Excelをpandasデータフレームとして読み取ります。
_import pandas as pd
file_path = 'path_for_your_input_Excel_sheet'
df = pd.read_Excel(file_path, encoding='utf-16')
_
_pandas.DataFrame.to_dict
_を使用して、pandasデータフレームをディクショナリに変換できます。- 同じドキュメントはこちら
_df.to_dict()
_
これにより、読んだExcelシートの辞書が得られます。
一般的な例:
_df = pd.DataFrame({'col1': [1, 2],'col2': [0.5, 0.75]},index=['a', 'b'])
_
_>>> df
_
_col1 col2 a 1 0.50 b 2 0.75
_
>>> df.to_dict()
_{'col1': {'a': 1, 'b': 2}, 'col2': {'a': 0.5, 'b': 0.75}}
_
私は行きます:
wb = xlrd.open_workbook('foo.xls')
sh = wb.sheet_by_index(2)
lookup = dict(Zip(sh.col_values(2, 0, 138), sh.col_values(0, 0, 138)))
これをcsvに変換できる場合、これは非常に適しています。
import dataconverters.commas as commas
filename = 'test.csv'
with open(filename) as f:
records, metadata = commas.parse(f)
for row in records:
print 'this is row in dictionary:'+row