来自数据框的嵌套字典,具有循环列表

时间:2018-07-18 15:11:44

标签: python pandas loops dictionary nested

在这里完成新手。

我想从嵌套字典的几个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,...}

现在,在我看来,我已经完成了“较难”的部分,但似乎无法弄清楚如何用此循环生成的字典填充新词典。...

任何帮助将不胜感激! 最好的祝福, 扬

2 个答案:

答案 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帮助,如果没有您的评论,我仍然会陷入循环:)