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

pandas获取指定国家对应result列非NaN值及筛选报错解决

问题原因

代码不生效的核心问题是loc的列索引参数传入错误:你传入的是变量country的值(比如UK),但你的DataFrame中不存在名为UK的列,你需要提取的是result列的数值,所以列索引位置应该传入'result'而不是country。

基础实现(仅过滤非空值)

首先确保已经导入依赖库:

import pandas as pd
import numpy as np

单个国家查询实现:

country = 'UK'
mask_country = df['country'] == country
mask_result = df['result'].notnull()
# 正确写法,取result列后转列表
result_list = df.loc[mask_country & mask_result, 'result'].tolist()
print(result_list) # 输出 ['A', 'B']

如果需要批量获取所有国家的对应结果,可以直接用groupby聚合:

all_country_res = df.dropna(subset=['result']).groupby('country')['result'].agg(list).to_dict()
print(all_country_res) # 输出 {'UK': ['A', 'B'], 'US': ['C', 'D', 4]}
补充需求实现(保留非空、非空格的字符串类型值)

新增自定义校验规则过滤即可:

def filter_valid_val(x):
    # 仅保留非空、非全空格的字符串类型值
    return isinstance(x, str) and x.strip() != ''

# 单个国家查询
country = 'US'
mask_country = df['country'] == country
mask_valid = df['result'].apply(filter_valid_val)
result_list = df.loc[mask_country & mask_valid, 'result'].tolist()
print(result_list) # 输出 ['C', 'D'],数值类型的4会被过滤

批量获取所有国家的合规结果:

all_valid_res = df[df['result'].apply(filter_valid_val)].groupby('country')['result'].agg(list).to_dict()
print(all_valid_res) # 输出 {'UK': ['A', 'B'], 'US': ['C', 'D']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:39:02