如何创建以Pandas列为键、对应value_counts字典为值的字典?
解决方法:创建以Object类型列为键、value_counts字典为值的字典
我来帮你搞定这个问题!先说说你遇到的问题原因,再给你两种可行的实现方式:
为什么第一种写法报错?
你用了{}来推导,这在Python里是集合推导式,而集合要求所有元素都是可哈希的。你生成的元素是(列名, 对应value_counts字典)这样的元组,但元组里包含了不可哈希的字典类型,所以就抛出了TypeError: unhashable type: 'dict'的错误。而且你本来想要的是字典,不是集合,所以语法用错啦。
方法一:直接用字典推导式(推荐)
字典推导式的语法是{键: 值 for 变量 in 可迭代对象},正好符合你的需求。另外加上select_dtypes(include=['object'])可以精准筛选出所有object类型的列,避免处理非目标列:
import pandas as pd # 假设你的DataFrame是df value_counts_dict = { c: dict(df[c].value_counts()) for c in df.select_dtypes(include=['object']).columns }
方法二:把元组列表转成字典
你第二种写法得到的元组列表,其实可以直接用dict()函数转换成字典,这也是一种简单的方法:
# 先生成元组列表 value_counts_tuples = [ (c, dict(df[c].value_counts())) for c in df.select_dtypes(include=['object']).columns ] # 转成字典 value_counts_dict = dict(value_counts_tuples)
举个实际例子
假设你有这样的DataFrame:
df = pd.DataFrame({ 'Fruit': ['Apple', 'Banana', 'Apple', 'Orange', 'Banana'], 'Color': ['Red', 'Yellow', 'Red', 'Orange', 'Yellow'], 'Quantity': [3, 2, 5, 1, 4] # 非object类型,会被自动排除 })
运行上面的代码后,value_counts_dict的结果会是:
{ 'Fruit': {'Apple': 2, 'Banana': 2, 'Orange': 1}, 'Color': {'Red': 2, 'Yellow': 2, 'Orange': 1} }
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

