Python中透视含字典值的DataFrame:解决pivot_table报错问题
解决DataFrame透视时含字典类型列的报错问题
问题场景
原始DataFrame结构如下(Quantity列同时包含字典和数值类型):
Code Description Date Quantity dasd2132 dummy 1 2023-06 {'prev_value': 0.0, 'new_value': 90.0} 312dasda dummy 2 2023-07 0 das432cs dummy 3 2023-08 0 31231dsa dummy 4 2023-09 0
需求是将Date列的值作为新的列名,Quantity列的内容填充到对应列,最终得到如下格式的结果:
Code Description 2023-06 2023-07 2023-08 2023-09 dasd2132 dummy 1 {'prev_value': 0.0, 'new_value': 90.0} 0 0 0
尝试使用pivot_table实现时:
pivoted_df = pd.pivot_table(df, index=['Code', 'Description'], values='Quantity', columns='Date', sort=False)
触发报错:TypeError: unhashable type: 'dict'
优化解决方案
方案1:使用pivot方法
pivot无需默认聚合操作,只要index+columns的组合唯一即可直接转置,最后补全空值为0:
import pandas as pd pivoted_df = df.pivot(index=['Code', 'Description'], columns='Date', values='Quantity').fillna(0)
方案2:使用set_index + unstack组合
通过设置多层索引后将Date层转为列,同样补全空值:
import pandas as pd pivoted_df = df.set_index(['Code', 'Description', 'Date'])['Quantity'].unstack(level='Date').fillna(0)
报错原因说明
pivot_table默认会对values列执行聚合计算(如均值、求和),而字典属于不可哈希类型,无法参与聚合逻辑,因此抛出报错。上述两种方法均不需要聚合操作,适配你的数据唯一性场景(每条数据的Code+Description+Date组合唯一),可以正常保留字典类型的值并完成透视。
内容的提问来源于stack exchange,提问作者Noor Fatimah
相关产品推荐
相关产品推荐

