Pandas技术问题:将字典转DataFrame时仅显示列名如何解决
问题原因
你构造的final字典结构是{account_id: 对应type的出现次数},当你用pd.DataFrame(final, columns=['account_id','type'])创建DataFrame时,Pandas会默认把字典的键当作列名,但你指定的列名是account_id和type,和字典的键不匹配,因此没有数据填充。
解决方法
方法1:将字典转成元组列表后构造DataFrame
直接把字典的键值对转成(account_id, 次数)的元组列表,再传入DataFrame:
df_result = pd.DataFrame(final.items(), columns=['account_id', 'type'])
方法2:用from_dict指定索引方向
利用pd.DataFrame.from_dict的orient='index'参数,把字典的键当作行索引,再重置索引并修改列名:
df_result = pd.DataFrame.from_dict(final, orient='index', columns=['type']) df_result = df_result.reset_index().rename(columns={'index': 'account_id'})
方法3:跳过字典,直接用分组聚合一步生成结果
手动循环字典效率较低,推荐直接通过Pandas的分组聚合操作完成需求,无需额外构造字典:
# 如果你需要的是每个account_id下type的最高出现次数 df_result = df.groupby('account_id')['type'].value_counts() \ .groupby('account_id').first() \ .reset_index(name='type') # 如果你实际需求是获取每个account_id下出现次数最多的type类别(而非次数),修正原逻辑: df_result = df.groupby('account_id')['type'].agg(lambda x: x.mode()[0]) \ .reset_index(name='most_common_type')
内容的提问来源于stack exchange,提问作者QZhu
相关产品推荐
相关产品推荐

