如何遍历现有DataFrame筛选符合条件的行创建小型DataFrame
问题解答
处理pandas DataFrame行筛选场景完全不需要手动遍历,尤其是你提到数据量很大的情况,手动逐行遍历性能极差,用pandas原生的向量化筛选语法才是正确做法,运行效率比遍历高几十到上百倍。
推荐实现方法
- 方法1:最常用的布尔索引(优先使用,兼容性最好)
直接按列名做判断筛选即可:
# 筛选METRIC_ID1列值为'sales_yoy'的行,生成新DataFrame new_df = df[df['METRIC_ID1'] == 'sales_yoy'].copy()
说明:末尾加
.copy()是为了避免后续修改新DataFrame时触发SettingWithCopyWarning警告,如果你不需要对新表做修改操作也可以省略,日常使用建议带上规避潜在问题。
- 方法2:按列位置筛选
如果你不想写列名,想直接按第10列的位置筛选,注意pandas列位置是从0开始计数,第10列对应的位置索引是9,可以用iloc写法:
new_df = df[df.iloc[:, 9] == 'sales_yoy'].copy()
- 方法3:query语法(写法更简洁)
习惯写类SQL查询语法的话也可以用query方法:
new_df = df.query("METRIC_ID1 == 'sales_yoy'").copy()
为什么不推荐遍历
不管是用iterrows()、itertuples()还是手写for循环逐行判断取值,都属于非向量化操作,在数据量较大时运行速度会远慢于上面的原生筛选方法,属于pandas使用中不推荐的反模式。
内容的提问来源于stack exchange,提问作者bolbolnuggets
相关产品推荐
相关产品推荐

