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

如何编写通用函数从Pandas DataFrame中按自定义约束筛选行?

Pandas 处理新冠疫情数据集:查询与通用函数实现

1. 导入并合并多个CSV数据集

先把所有CSV文件批量读取并合并成一个统一的DataFrame,方便后续操作:

import pandas as pd
import glob

# 替换成你的CSV文件所在文件夹路径
csv_file_paths = glob.glob("./covid_datasets/*.csv")

# 批量读取每个CSV并存入列表
dataset_list = []
for file_path in csv_file_paths:
    single_df = pd.read_csv(file_path)
    dataset_list.append(single_df)

# 合并所有数据集,重置索引
combined_covid_df = pd.concat(dataset_list, ignore_index=True)

# 快速查看关键列的前几行数据
print(combined_covid_df[["country_region", "last_update", "confirmed"]].head())

2. 查询德国的新冠确诊病例数

直接用布尔索引筛选country_region等于"Germany"的行,还可以按更新时间排序取最新数据:

# 筛选德国的数据(注意大小写匹配,不放心可以统一转小写)
germany_covid_data = combined_covid_df[combined_covid_df["country_region"].str.lower() == "germany"]

# 按更新时间倒序,取最新的确诊数记录
latest_germany_confirmed = germany_covid_data.sort_values("last_update", ascending=False)[["last_update", "confirmed"]].iloc[0]
print(f"德国最新确诊数:{latest_germany_confirmed['confirmed']},更新时间:{latest_germany_confirmed['last_update']}")

3. 通用查询函数实现

写一个通用函数,支持传入任意列名和匹配值,返回符合条件的DataFrame切片,还能扩展支持不同的匹配逻辑:

基础版(精确匹配)

def get_filtered_df(df, target_column, match_value):
    # 先检查目标列是否存在
    if target_column not in df.columns:
        raise ValueError(f"数据集中没有 {target_column} 这一列")
    
    # 返回匹配的切片
    return df[df[target_column] == match_value]

# 用函数查德国数据
germany_data = get_filtered_df(combined_covid_df, "country_region", "Germany")
print(germany_data.head())

# 用函数查某一特定更新时间的数据
specific_date_data = get_filtered_df(combined_covid_df, "last_update", "2023-12-01")
print(specific_date_data.head())

进阶版(支持多种匹配逻辑)

如果需要大于、小于、包含等匹配方式,可以加个操作符参数:

import operator

def flexible_filter_df(df, target_column, match_value, compare_op=operator.eq):
    if target_column not in df.columns:
        raise ValueError(f"数据集中没有 {target_column} 这一列")
    
    # 根据传入的操作符执行匹配
    return df[compare_op(df[target_column], match_value)]

# 示例:查询确诊数大于500000的国家数据
high_confirmed_data = flexible_filter_df(combined_covid_df, "confirmed", 500000, compare_op=operator.gt)
print(high_confirmed_data[["country_region", "confirmed"]].head())

# 示例:查询国家名称包含"States"的数据
states_countries = flexible_filter_df(
    combined_covid_df, 
    "country_region", 
    "States", 
    compare_op=lambda col_val, val: col_val.str.contains(val)
)
print(states_countries["country_region"].unique())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:41:14