如何通过索引变量访问Pandas DataFrame列?批量绘制直方图优化方案
优化Pandas批量绘制特征直方图的方法
嘿,这个场景太常见了!硬写循环里的字符串拼接不仅麻烦,要是后续列数变了还得改代码,给你分享几个更优雅的实现方式:
方法1:动态筛选目标列(灵活适配列数变化)
先把所有带num.feature前缀的列筛选出来,再循环处理——不管是30列还是以后加更多列,都不用改循环的范围:
# 筛选所有以"num.feature"开头的列 feature_columns = [col for col in df.columns if col.startswith("num.feature")] # 批量绘制直方图 for col in feature_columns: df[col].hist(bins=90, range=(0, 0.4))
方法2:用df.filter()一键搞定(最简洁)
Pandas的filter方法支持通配符匹配列名,直接提取目标列组成新的DataFrame,甚至不用手动写循环——hist()方法会自动给每一列生成直方图:
# 提取所有包含"num.feature"的列 feature_subset = df.filter(like="num.feature") # 一键批量绘制,还能通过figsize调整整体布局 feature_subset.hist(bins=90, range=(0, 0.4), figsize=(16, 12))
进阶:个性化定制每个直方图
如果需要给每个图加标题、坐标轴标签这类个性化设置,还是可以结合循环,配合筛选后的列名来做:
for col in feature_subset.columns: ax = df[col].hist(bins=90, range=(0, 0.4)) ax.set_title(f"直方图:{col}") ax.set_xlabel("特征值") ax.set_ylabel("频次")
对比你原来的写法,这些方法的优势在于动态适配列名变化,不用硬编码列数,代码可读性和维护性都更高~
内容的提问来源于stack exchange,提问作者Feary
相关产品推荐
相关产品推荐

