Python pandas双条件筛选Excel数据:语句无效及语法问题求助
Python pandas双条件筛选数据问题解决
问题回顾
我是Python新手,想编写满足双条件的条件语句,当条件满足时输出对应行,但尝试过程中频繁遇到语法错误,或无任何输出。我有一个包含4列40行的Excel表格,数据示例如下:
Name Age Pet(s) Married john 30 1 yes mary 25 2 no ...
期望逻辑:当df['Age'] > 20且df['Pet(s)'] > 2时,输出该行数据,遍历整个数据集。读取Excel文件无问题,仅条件语句存在问题,代码片段如下:
FilePath = "location of file" FileName = "Name of file" df = pd.read_excel(FilePath + '//' + FileName + '.xlsx' ... For i in range( 0, len(df['age']) if ((df['age'] > 20) & (df['pet'] > 2)) print line
错误点分析
- 语法错误:Python关键字区分大小写,
For应改为小写for;range()、pd.read_excel()都缺少闭合括号;if语句末尾必须加冒号。 - 列名不匹配:数据中列名为
Age和Pet(s),代码里用的df['age']、df['pet'],pandas列名严格区分大小写,导致无法正确取值。 - 判断逻辑错误:直接用
df['age'] >20得到的是布尔类型的Series(整列的判断结果),不是单条数据的判断,循环中无法直接用这个条件筛选单一行。 - 遍历方式错误:循环中没有正确获取单一行的
Age和Pet(s)值,print line也没有指定要打印的行数据。
正确实现方式
方法一:pandas向量式筛选(推荐)
pandas原生支持整列的条件筛选,代码简洁且效率更高,适合处理批量数据:
import pandas as pd # 读取Excel文件,用f-string拼接路径更清晰 file_path = "location of file" file_name = "Name of file" df = pd.read_excel(f"{file_path}/{file_name}.xlsx") # 双条件筛选:Age>20 且 Pet(s)>2,注意用&连接条件,每个条件加括号 filtered_rows = df[(df['Age'] > 20) & (df['Pet(s)'] > 2)] # 直接输出所有符合条件的行 print(filtered_rows) # 如果需要逐行打印,用iterrows()遍历筛选后的结果 for idx, row in filtered_rows.iterrows(): print(row)
方法二:循环遍历单条数据(适合新手理解)
如果想通过循环逐行判断,需要正确获取每行的数值并判断:
import pandas as pd file_path = "location of file" file_name = "Name of file" df = pd.read_excel(f"{file_path}/{file_name}.xlsx") # 遍历每一行的索引 for i in range(len(df)): # 获取当前行的Age和Pet(s)值 current_age = df.loc[i, 'Age'] current_pets = df.loc[i, 'Pet(s)'] # 单条数据判断用and连接条件 if current_age > 20 and current_pets > 2: # 打印当前行的所有数据 print(df.loc[i])
内容的提问来源于stack exchange,提问作者Amber
相关产品推荐
相关产品推荐

