如何使用Pandas按地区筛选CSV数据子集?
解决Pandas筛选指定地区数据子集的问题
你的代码目前有几个关键问题,导致无法正确筛选数据:
- 函数参数传入的
df被内部重新赋值覆盖,完全没用到外部传入的DataFrame - 没有实现核心的按地区筛选逻辑
- 返回值不符合需求,你需要返回筛选后的子集,而非原数据和地区名
修正后的完整代码
import pandas as pd import os # 先在函数外部读取CSV,避免重复IO操作 path = os.getcwd() df = pd.read_csv(os.path.join(path, '2020.csv')) pd.set_option("display.precision", 2) def CreateSubsetPerRegion(df, region): # 用布尔索引筛选指定地区的行 region_subset = df[df['Region'] == region] return region_subset # 调用函数并展示结果 display(CreateSubsetPerRegion(df,'East Asia')) display(CreateSubsetPerRegion(df,'Central and Eastern Europe'))
关键逻辑说明
- 布尔索引筛选:
df[df['Region'] == region]会生成一个布尔数组,标记每一行的Region是否等于目标地区,然后用这个数组从原DataFrame中提取匹配的行,得到对应地区的子集。 - 避免重复读文件:把
pd.read_csv放到函数外面,只执行一次,提升效率,也符合函数的单一职责原则(函数只负责筛选,不负责读取文件)。 - 返回正确结果:直接返回筛选后的
region_subset,这就是你需要的指定地区DataFrame。
如果需要处理地区名称大小写不一致的情况,可以改成不区分大小写的筛选:
region_subset = df[df['Region'].str.lower() == region.lower()]
内容的提问来源于stack exchange,提问作者NoobAtProgramming
相关产品推荐
相关产品推荐

