如何将Pandas DataFrame单行转换为不含索引的字典?
如何将DataFrame单行转换为不含索引的字典?
你遇到的问题是因为to_dict()直接对单行DataFrame转换时,会保留DataFrame的层级结构(列作为外层键,索引作为内层键)。要得到你想要的扁平字典,有几个简单的解决方案:
方法1:用iloc[0]提取单行转为Series后再转字典
先通过iloc[0]把筛选后的单行DataFrame转换成Series,Series的to_dict()方法会直接生成「列名: 单元格内容」的对应关系,不会带索引嵌套:
v = catStr_df[catStr_df['Item Number']==34881][['Bottle Volume (ml)', 'Pack']]\ .drop_duplicates(keep='first').iloc[0].to_dict()
执行后就能得到你期望的结果:{'Bottle Volume (ml)': 1000, 'Pack': 12}
方法2:用squeeze()压缩单行DataFrame为Series
squeeze()会自动把只有一行的DataFrame转换成Series,用法和上面类似,还能兼容筛选结果为空的情况(不会直接抛出索引越界错误):
v = catStr_df[catStr_df['Item Number']==34881][['Bottle Volume (ml)', 'Pack']]\ .drop_duplicates(keep='first').squeeze().to_dict()
方法3:手动处理原有字典(仅作参考,不推荐)
如果已经得到了带索引的字典,也可以通过遍历提取每个列对应的第一个值:
original_dict = catStr_df[catStr_df['Item Number']==34881][['Bottle Volume (ml)', 'Pack']]\ .drop_duplicates(keep='first').to_dict() v = {col: list(values.values())[0] for col, values in original_dict.items()}
不过这种方法不如前两种简洁直观,优先推荐方法1和方法2。
内容的提问来源于stack exchange,提问作者user3476463
相关产品推荐
相关产品推荐

