如何筛选pandas唯一值大于10的分类列及解决循环打印无结果问题
问题1:筛选唯一值数量大于10的分类列并存入列表
你之前生成的是布尔类型的Series,索引就是分类列的列名,直接对这个布尔Series做过滤取索引即可,代码如下:
# 分步写法可读性更高 unique_bool = data[cat_cols].nunique() > 10 cat_cols_with_high_card = unique_bool[unique_bool].index.tolist() # 也可以用链式写法完成 cat_cols_with_high_card = data[cat_cols].nunique()[lambda x: x>10].index.tolist()
执行后得到的cat_cols_with_high_card就是你需要的列名列表['1','2','3']。
问题2:循环中value_counts()没有输出的原因
这个问题和列名类型无关,你的cat_cols里的列名本身就是字符串类型,和你手动定义的列表元素类型完全匹配,问题出在Jupyter Notebook的输出机制:
- 只有单元格的最后一行执行结果会被自动打印输出
- 循环内部的语句不属于单元格最后一行,不会自动输出,需要主动调用
print()函数打印结果
修改后的循环代码如下:
cat_cols_with_high_card = ['1','2','3'] for col in cat_cols_with_high_card: print('column: '+str(col)) print(data[col].value_counts()) # 可按需添加分割线,方便区分不同列的结果 print('-'*30)
运行后就能正常输出每列的value_counts结果了。
内容的提问来源于stack exchange,提问作者chink
相关产品推荐
相关产品推荐

