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

Posted

技术标签:

【中文标题】来自数据框的嵌套字典,带有循环列表【英文标题】:Nested dictionary from dataframe with loop over list 【发布时间】:2018-12-26 13:53:01 【问题描述】:

在这里完成新手。

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

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

非常感谢任何帮助! 最好的祝福, 一月

【问题讨论】:

【参考方案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

【讨论】:

嘿Rahlf23,首先:非常感谢您的帮助!您发布的解决方案有效,但不是 100% 符合预期:现在我得到了您提到的字典列表:[..., .......] 但我想使用表名称来处理字典中的值。例如:print(dic[SheetName1][Index1]) = xxx 我认为列表不可能?所以我正在寻找类似SheetName1:Index1: Value1.... 而不是[SheetName1:Index1: Value1] 的东西你还有什么想法吗?最好的问候,简 你打赌,谢谢你澄清你的问题。我已更新我的答案以反映您的说明。【参考方案2】:

我只是在稍微调整了@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,如果没有您的评论,我仍然会被困在循环中:)

【讨论】:

以上是关于来自数据框的嵌套字典,带有循环列表的主要内容,如果未能解决你的问题,请参考以下文章

从嵌套字典结构列表(具有两个级别)创建数据框的 Pythonic 方法是啥?

将带有嵌套列表的列表转换为带有嵌套数据框的单行小标题

递归遍历带有列表的嵌套字典,并替换匹配的值

Python:带有字符串列表和子字典的嵌套字典

来自数据框的嵌套字典,内部字典包含熊猫系列作为值

如何将带有嵌套字典的列表写入 csv 文件?