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

如何从Pandas DataFrame中获取指定值及编写对应自定义函数

Hey,我来帮你搞定这两个Pandas相关的问题,分两部分给你讲清楚:

一、从Pandas DataFrame中获取指定值的通用方法

假设你已经有了df3_merged这个DataFrame,要获取任意两个指定值(比如Angola1960和Zambia1980的骑行人数),有两种常用的方式:

方法1:先筛选行再提取列

先通过国家名称定位到目标行,再取出对应年份列的值:

# 获取Angola 1960的骑行人数
angola_1960 = df3_merged[df3_merged['Country Name'] == 'Angola'][1960].values[0]
# 获取Zambia 1980的骑行人数
zambia_1980 = df3_merged[df3_merged['Country Name'] == 'Zambia'][1980].values[0]

注意:如果你的年份列名是字符串类型(比如列名是'1960'而不是整数1960),要把年份转成字符串传入,比如['1960']。

方法2:使用.loc索引(更推荐)

.loc是Pandas中用于标签索引的工具,写法更直观,可读性更强:

# 获取Angola 1960的骑行人数
angola_1960 = df3_merged.loc[df3_merged['Country Name'] == 'Angola', 1960].iloc[0]
# 获取Zambia 1980的骑行人数
zambia_1980 = df3_merged.loc[df3_merged['Country Name'] == 'Zambia', 1980].iloc[0]

这里的.iloc[0](或者.values[0])是因为筛选后得到的是一个Series,我们需要取出唯一的那个标量值(假设每个国家名称在DataFrame中唯一)。

二、实现pop_bikers函数的具体方案

根据你的需求,我写了两个版本的函数:一个是健壮性较强的(带异常处理),另一个是简洁版(适合输入合法的场景)。

版本1:带异常处理的健壮版

这个版本会检查输入的国家和年份是否存在,避免程序崩溃:

def pop_bikers(country_name, year):
    # 筛选出目标国家的行
    country_row = df3_merged[df3_merged['Country Name'] == country_name]
    
    # 检查国家是否存在
    if country_row.empty:
        raise ValueError(f"Oops,找不到国家 '{country_name}' 哦!")
    
    # 兼容年份列是整数或字符串的情况
    target_year = year
    if target_year not in df3_merged.columns:
        target_year = str(year)
        if target_year not in df3_merged.columns:
            raise ValueError(f"年份 '{year}' 不在DataFrame的列中!")
    
    # 返回对应年份的骑行人数
    return country_row[target_year].values[0]

测试一下:

# 调用函数,应该返回3304
print(pop_bikers('Zambia', 1970))  # 输出: 3304

版本2:简洁版(适合输入合法的场景)

如果能确保每次调用的国家名称和年份都存在,这个版本更简洁:

def pop_bikers(country_name, year):
    # 直接用.loc定位并取出值
    return df3_merged.loc[df3_merged['Country Name'] == country_name, year].iloc[0]

同样,调用pop_bikers('Zambia', 1970)会返回3304,完全符合你的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:39:06