You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中如何基于列值(国家)筛选DataFrame?欧洲国家数据筛选失效问题排查

Pandas按国家列筛选数据失败的原因及正确方法

我来帮你梳理下为什么你的筛选代码没得到预期结果,再分享几种靠谱的筛选方法~

可能导致筛选失败的原因

  • 大小写严格匹配问题:Pandas的isin()是完全大小写敏感的!比如你的Data里COUNTRY列存的是"austria"或"AUSTRIA",但你的列表里是"Austria",这时候就会匹配不到。
  • 字符串含多余空格:如果数据里的国家名称前后有空格(比如" France "),而你的列表里是干净的"France",也会匹配失败。
  • 国家名称不统一:比如数据里用的是"Czechia"而不是你列表里的"Czech Republic",或者"Cyprus"代替"Republic of Cyprus",名称不一样肯定匹配不上。
  • 对象名称/列名错误:如果你的DataFrame实际叫df而不是Data,或者列名是Country(首字母小写)而不是COUNTRY,Pandas对大小写敏感,会直接导致筛选逻辑失效。

正确的筛选方法

1. 修正isin()方法(解决大小写/空格问题)

先统一处理数据和列表的格式,避免匹配误差:

# 定义欧洲国家列表
country_list = ['Austria', 'Belgium', 'Bulgaria', 'Croatia', 'Republic of Cyprus', 'Czech Republic', 'Denmark', 'Estonia', 'Finland', 'France', 'Germany', 'Greece', 'Hungary', 'Ireland', 'Italy', 'Latvia', 'Lithuania', 'Luxembourg', 'Malta', 'Netherlands', 'Poland', 'Portugal', 'Romania', 'Slovakia', 'Slovenia', 'Spain' , 'Sweden']

# 把列表转成小写,同时处理DataFrame的COUNTRY列:去空格+转小写
filtered_df = Data[Data['COUNTRY'].str.strip().str.lower().isin([c.lower() for c in country_list])]

2. 布尔索引直接匹配(适合少量国家)

如果只筛选几个国家,用布尔逻辑更直观:

# 筛选法国和德国,注意用|表示“或”,每个条件要加括号
filtered_df = Data[(Data['COUNTRY'].str.strip() == 'France') | (Data['COUNTRY'].str.strip() == 'Germany')]

3. 用query()方法(语法更简洁)

query()可以用类似SQL的语法筛选,写起来更清爽:

# 把国家列表转成query能识别的字符串格式
country_str = "', '".join(country_list)
# 基础版筛选
filtered_df = Data.query(f"COUNTRY in ('{country_str}')")

# 带格式处理的版本(解决空格/大小写)
filtered_df = Data.query(f"COUNTRY.str.strip().str.lower() in ('{country_str.lower()}')")

排查技巧:先确认数据情况

如果还是没结果,先看看数据里的实际情况:

# 查看COUNTRY列的所有唯一值,核对名称是否匹配
print(Data['COUNTRY'].unique())

# 统计匹配到的行数,确认是不是真的没有匹配项
match_num = Data['COUNTRY'].isin(country_list).sum()
print(f"匹配到的行数:{match_num}")

内容的提问来源于stack exchange,提问作者Marzieh Karimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:27:42