You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中根据列条件筛选整行数据到新DataFrame?

解决Pandas按条件筛选行到新DataFrame的问题

原代码的问题分析

  • 条件判断逻辑错误:[EQdataW['Distance_Between'] <= 1000] == True是把整个布尔Series包装成列表后和单个布尔值True比较,永远返回False,导致所有行都进入else分支。
  • 行定位方式错误:EQdataW[i,:]不是Pandas DataFrame取单行的正确写法,应该用iloc[i]来定位单行数据。
  • 列表操作错误:viableData = viableData.append(...)会覆盖原列表,因为append是原地修改列表,返回值为None。

推荐的高效实现(Pandas向量化操作)

Pandas原生支持向量化筛选,这是最简洁、性能最优的方式,完全不需要手动循环:

# 直接筛选符合条件的行到新DataFrame
viableData = EQdataW[EQdataW['Distance_Between'] <= 1000]

# 可选:输出不符合条件的索引
invalid_rows = EQdataW[EQdataW['Distance_Between'] > 1000]
for idx in invalid_rows.index:
    print(f'Index: {idx} Distance > 1,000 km')

若坚持使用循环的修改方案(不推荐,效率较低)

如果一定要用循环实现,修正后的代码如下:

import pandas as pd

viableData = []
for i in range(len(EQdataW)):
    # 通过iloc获取第i行的Distance_Between值
    if EQdataW.iloc[i]['Distance_Between'] <= 1000:
        viableData.append(EQdataW.iloc[i])
    else:
        print(f'Index: {i} Distance > 1,000 km')

# 将收集到的行转为DataFrame
viableData = pd.DataFrame(viableData)

内容的提问来源于stack exchange,提问作者Odin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:57:31