在这里完成新手。
我想从嵌套字典的几个Excel工作表中的两列中读取数据。最后,我想要一本像这样的字典:
{SheetName1:{Index1: Value1, Index2: Value2,...}, SheetName2:{Index1: Value1, Index2: Value2} ...}
到目前为止,我使用pandas读取了数据,并弄清楚了如何将我需要的两列合并到内部字典{Index:Value}中,然后从外部字典中分配工作表的名称作为键。 :
#read excel sheet into dataframe
df = ExcelWorkbook.parse(sheet_name = None, header= 1, usecols= 16, skiprows= 6)
#read in the different excel sheet names in a List
SHEETNAMES = []
SHEETNAMES = ExcelWorkbook.sheet_names
#nested dictionary
for Sheet in SHEETNAMES:
df[Sheet] = df[Sheet].loc[0:87,:]
dic = dict(zip(df[Sheet].index, df[Sheet]['ColumnName']))
dic = {Sheet: dic}
现在,当我运行此命令时,它只会返回最后一张纸及其相应的{Index:Value}对:
{'LastSheetName': {Key1: Value1, Key2: Value2,...}
现在,在我看来,我已经完成了“较难”的部分,但似乎无法弄清楚如何用此循环生成的字典填充新词典。...
任何帮助将不胜感激! 最好的祝福, 扬
答案 0 :(得分:1)
每次迭代for循环时,您都将dic
分配为新变量。而是将dic
实例化为循环外部的空列表[]
,然后将您在循环内部定义的字典附加到该循环中,例如:
#read excel sheet into dataframe
df = ExcelWorkbook.parse(sheet_name = None, header= 1, usecols= 16, skiprows= 6)
#nested dictionary
dic = []
for Sheet in ExcelWorkbook.sheet_names:
df[Sheet] = df[Sheet].iloc[0:87,:]
out = {Sheet: dict(zip(df[Sheet].index, df[Sheet]['ColumnName']))}
dic.update(out)
此外,考虑到您要在数据框内部指定索引位置,您还希望使用.iloc
代替.loc
。
答案 1 :(得分:0)
我稍微调整了@ rahlf23响应后才弄明白了。因此,对于任何查找此内容的人:
dic.append()对字典不起作用,相反,我使用了dic.update():
#nested dictionary
dic1 = {}
for Sheet in SHEETNAMES:
df[Sheet] = df[Sheet].iloc[0:87,:]
out = dict(zip(df[Sheet].index, df[Sheet]['ColumnName']))
out2 = {Sheet: out}
dic1.update(out2)
现在可以使用以下命令访问值:
print(dic1[SheetName][Index])
感谢您的@ rahlf23帮助,如果没有您的评论,我仍然会陷入循环:)