pandas DataFrame 数据筛选

数值筛选

一. 单条件筛选

# 筛选B列大于0的数据
df[df['B'] > 0]

二. 多条件筛选

# 筛选B列大于0且C列小于1的数据
df[(df['B'] > 0) & (df['C'] < 1)]
# 筛选B列大于0或C列小于1的数据
df[(df['B'] > 0) | (df['C'] < 1)]
# 选择某列等于多个数值或者字符串
df[df['B'].isin([1,2,3,4,5])]

字符串的模糊筛选

一. .str.contains()

# 删选姓陈或者名字中含有S的行
df.loc[df['姓名'].str.contains('陈|S']] 
# 删选不姓陈的行
df.loc[df['姓名'].str.contains('陈'] == False] 

注意:这里只能使用或(|)不能用且(&)

二. .str.startswith()

# 删选姓陈的行
df.loc[df['姓名'].str.startswith('陈']] 
<think>好的,我现在需要帮助用户解决如何使用Pandas库对DataFrame进行行筛选的问题。首先,我得回顾一下用户提供的引用内容,看看里面有哪些有用的信息。 用户提供了五个引用,其中引用[1]、[2]、[3]和[5]都提到了使用Pandas进行数据筛选的不同方法,特别是基于列的条件筛选、使用in和not in操作符,以及apply函数结合lambda表达式。引用[4]提到了删除行或列的drop方法,但用户的问题是关于筛选行,所以可能暂时用不上,但可以作为补充知识。 首先,我应该整理常见的行筛选方法。根据引用内容,可能包括: 1. 布尔索引:基于列的条件组合,比如df[df['列名'] > ],这在引用[1]和[2]中都有提到。 2. 多条件组合:使用&、|等逻辑运算符,比如(df['A'] > 1) & (df['B'] == 'X'),引用[1]和[2]的示例可能有涉及。 3. isin()方法:用于筛选某列的是否在某个列表中,类似于SQL的IN,这在引用[3]中有详细说明。 4. query()方法:使用字符串表达式进行查询,可能更简洁。 5. apply()函数结合lambda:处理复杂条件,如引用[5]中的示例,用apply逐行处理。 接下来,我需要确保每个方法都有对应的代码示例,并且符合用户提供的引用中的内容。例如,引用[3]提到了isin的使用,所以需要包含示例代码。引用[5]中的apply和lambda的例子也需要展示。 另外,用户要求结构清晰,分步骤说明,所以每个方法应该作为单独的步骤或小节,每个步骤下给出示例代码和解释。同时,要注意代码的正确性,比如使用正确的语法,比如在布尔索引中条件需要用括号括起来,避免运算符优先级问题。 还需要注意,用户可能需要示例代码的数据集,所以可能需要构造一个示例DataFrame,如引用[4]中的例子,或者使用用户提供的引用中的示例数据。比如引用[4]中的data变量可能是一个3x3的DataFrame,可以用类似的示例数据。 另外,需要检查是否有遗漏的方法,比如loc和iloc方法,但根据引用内容,可能用户提供的引用中没有提到,但根据Pandas的常用方法,可能需要简要提及,但重点放在用户引用中提到的方法上。 最后,生成相关问题,可能需要包括如何组合多个条件、如何处理复杂条件、isin的应用场景、性能比较等,根据用户提供的示例中的相关问题,如引用示例中的快速排序相关问题,应该生成与行筛选相关的问题,比如不同方法的优缺点、多条件筛选、性能优化等。 现在,整理这些思路,形成结构化的回答,分步骤介绍每种方法,确保每个步骤有代码示例和说明,并正确引用用户提供的引用内容。同时,生成的代码要符合LaTeX格式要求,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能不太涉及数学公式,但需要注意代码块的格式是否正确,使用反引号包裹,并标明python语言。 最后,验证所有引用的使用是否正确,比如引用[3]对应isin方法,引用[5]对应apply方法,引用[1]和[2]对应基本布尔索引等。确保每个引用标识符正确对应,没有重复或错误。 可能还需要注意用户是否提到其他需求,比如使用中文回答、生成相关问题等,确保这些都被满足。</think>### 使用Pandas进行DataFrame筛选的详细方法 #### 1. 布尔索引(单条件筛选) 通过列的条件表达式直接生成布尔序列,筛选符合条件的数据行。 示例代码(筛选"年龄"列大于18的行): ```python import pandas as pd df = pd.DataFrame({"姓名": ["张三", "李四", "王五"], "年龄": [17, 20, 19]}) filtered_df = df[df["年龄"] > 18] ``` 输出结果: ``` 姓名 年龄 1 李四 20 2 王五 19 ``` #### 2. 多条件组合筛选 使用`&`(与)、`|`(或)、`~`(非)组合多个条件,**注意每个条件必须用括号包裹**。 示例代码(筛选年龄>18且性别为"男"): ```python # 扩展数据集 df["性别"] = ["男", "女", "男"] filtered_df = df[(df["年龄"] > 18) & (df["性别"] == "男")] ``` 输出结果: ``` 姓名 年龄 性别 2 王五 19 男 ``` #### 3. 使用`isin()`方法筛选 模仿SQL的`IN`操作,筛选属于指定集合的行[^3]。 示例代码(筛选特定姓名): ```python target_names = ["张三", "王五"] filtered_df = df[df["姓名"].isin(target_names)] ``` #### 4. 使用`query()`方法 通过字符串表达式实现更简洁的条件筛选。 示例代码(等价于多条件筛选): ```python filtered_df = df.query("年龄 > 18 and 性别 == '男'") ``` #### 5. 使用`apply()`处理复杂条件 当筛选逻辑需要跨列计算时,可用`apply`结合`lambda`[^5]。 示例代码(筛选年龄与ID之和大于20的行): ```python df["ID"] = [100, 101, 102] # 添加ID列 filtered_df = df[df.apply(lambda row: row["年龄"] + row["ID"] > 20, axis=1)] ``` #### 6. 索引标签筛选(`loc`方法) 通过行索引标签进行精确筛选: ```python filtered_df = df.loc[["一", "三"]] # 假设索引为["一", "二", "三"][^4] ``` ### 性能对比与选择建议 | 方法 | 适用场景 | 性能 | |-----------|--------------------------|------| | 布尔索引 | 简单条件 | 最优 | | `isin()` | 多匹配 | 次优 | | `query()` | 复杂表达式 | 中等 | | `apply()` | 跨列计算/自定义函数 | 较低 | ### 完整示例数据集 ```python import pandas as pd data = { "姓名": ["张三", "李四", "王五", "赵六"], "年龄": [17, 20, 19, 22], "城市": ["北京", "上海", "广州", "深圳"], "成绩": [85, 90, 78, 95] } df = pd.DataFrame(data) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值