Python编写函数从CSV导入的DataFrame中筛选指定城市行生成新DataFrame
你现在的函数逻辑没有语法错误,也补全了返回值逻辑,出现返回结果不符合预期的情况,通常是以下几种原因,对应解决方法如下:
常见问题排查
- 列名不匹配
你筛选时用的列名City需要和CSV里的实际列名完全一致,包括大小写、前后空格。你可以执行以下代码查看实际列名:
print(CityDF.columns.tolist())
如果列名不匹配,把筛选逻辑里的列名改成实际值即可。
- 城市值匹配不一致
CSV中存储的城市名称可能存在大小写差异、前后带空格的情况,和你传入的'London'没有完全匹配,导致筛选结果为空。可以执行以下代码查看所有唯一的城市值:
# 把括号里的'City'改成你实际的城市列名 print(CityDF['City'].unique().tolist())
确认有完全匹配的London值即可,没有的话调整传入的城市名称参数。
优化后的鲁棒版本函数
如果想要避免格式不统一导致的匹配失败,可以用以下优化后的函数,自动处理大小写、前后空格问题,同时避免后续修改新DF时触发pandas的SettingWithCopyWarning:
def rData(newCityDF, CityName): # 自动处理列值和传入参数的前后空格、大小写差异 match_mask = newCityDF['City'].str.strip().str.lower() == CityName.strip().lower() UpdatedDF = newCityDF[match_mask].copy() return UpdatedDF
结果验证
调用函数后可以执行以下代码确认返回结果是否正确:
import pandas as pd data_path = 'file.csv' CityDF = pd.read_csv(data_path) newDF = rData(CityDF, 'London') # 打印返回结果的行列数,行数不为0说明匹配成功 print(f"匹配到的行数:{newDF.shape[0]},列数:{newDF.shape[1]}") # 打印前5行数据确认内容 print(newDF.head())
内容的提问来源于stack exchange,提问作者Joe 5
相关产品推荐
相关产品推荐

