如何在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
相关产品推荐
相关产品推荐

