如何使用Pandas根据用户输入的物种名处理DataFrame:统计Status列频次并获取FTP Path及代码修正
修复你的Pandas筛选代码
我来帮你一步步修复代码,你的代码里有几个语法、逻辑和列名匹配的问题导致运行失败,咱们逐个解决:
问题点分析
- 列名错误:你的DataFrame列索引是
#Organism/Name,但代码里写的是Organism/Name,漏掉了开头的#,这会直接导致"列不存在"的报错。 - 语法与大小写问题:if语句括号未闭合,且混用了
Data和data(Python大小写敏感,变量名必须完全一致)。 - 逻辑混乱:重复了相同的判断逻辑,且else分支的逻辑不符合需求——你需要先筛选目标物种的行,再统一处理统计和FTP路径获取,而非分开判断。
修正后的完整代码
import pandas as pd # 假设你的DataFrame已经正确加载为变量data print("bacterie species?") species = input().strip() # 去除输入前后空格,避免因空格导致匹配失败 # 筛选目标物种的行,使用正确的列名#Organism/Name filtered_rows = data.loc[data["#Organism/Name"] == species] if not filtered_rows.empty: # 统计Status列的value_counts print("Status 统计结果:") print(filtered_rows['Status'].value_counts()) # 获取对应的FTP Path,转换为列表方便查看所有结果 print("\n对应的FTP Path:") print(filtered_rows['FTP Path'].tolist()) else: print("This species not found")
关键修正说明
- 列名匹配:严格使用
#Organism/Name作为筛选列名,和你的DataFrame索引保持一致。 - 统一变量名:全程使用小写
data(原代码中的Data是错误拼写)。 - 优化筛选逻辑:先把筛选结果存入
filtered_rows变量,避免重复执行筛选操作,同时通过not filtered_rows.empty判断是否找到目标物种。 - 输入处理:用
strip()处理用户输入,避免用户不小心输入前后空格导致匹配失败。 - FTP Path处理:用
tolist()将Series格式的FTP路径转换为列表,方便查看所有匹配的结果(如果有多个行的话)。
内容的提问来源于stack exchange,提问作者Yad.yos
相关产品推荐
相关产品推荐

