如何从Pandas DataFrame中筛选指定列后再过滤行?
解决Pandas筛选指定列+条件行的问题
嘿,我明白你现在的困扰啦——你之前用for col in df.loc[:, ["B", "D"]]的方式其实是在遍历列名,而不是逐行处理,这当然没法在if语句里筛选目标行。Pandas的核心优势是矢量化操作,咱们完全不用写循环就能高效完成“选列+筛行”的需求,具体方法如下:
核心思路:先定条件,再精准提取
Pandas的loc方法可以同时完成行筛选和列选择,一步到位;或者你也可以分两步先选列再筛行,两种方式都很简单。
示例场景
先假设咱们有这样一个测试DataFrame:
import pandas as pd data = { "A": [1, 2, 3, 4, 5], "B": [12, 8, 25, 18, 5], "C": [100, 200, 300, 400, 500], "D": [7, 14, 21, 28, 35] } df = pd.DataFrame(data)
方法1:一步到位(推荐,更高效)
直接用loc,第一个参数是行筛选的布尔条件,第二个参数是要保留的列名列表:
# 比如筛选B列值大于10,且只保留B、D列的行 filtered_df = df.loc[df["B"] > 10, ["B", "D"]]
如果需要多个条件(比如B>10 且 D>20),记得用&连接,并且每个条件要加括号:
filtered_df = df.loc[(df["B"] > 10) & (df["D"] > 20), ["B", "D"]]
方法2:分两步操作(更直观)
先提取出B、D列,再对这个子DataFrame应用筛选条件:
# 第一步:提取B、D列 selected_cols = df[["B", "D"]] # 第二步:筛选符合条件的行(比如B列小于10) filtered_df = selected_cols[selected_cols["B"] < 10]
为什么不用for循环?
Pandas的循环遍历行/列效率极低,尤其是数据量大的时候——矢量化操作是Pandas底层用C实现的,速度比Python循环快几十甚至上百倍,代码也更简洁易读。
内容的提问来源于stack exchange,提问作者Atihska
相关产品推荐
相关产品推荐

