来自数据框的嵌套字典,带有循环列表
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,如果没有您的评论,我仍然会被困在循环中:)
【讨论】:
以上是关于来自数据框的嵌套字典,带有循环列表的主要内容,如果未能解决你的问题,请参考以下文章