从DataFrame提取值时意外引入索引信息的问题解决
解决Python提取南美洲女性人口数据时获取纯数值列表的问题
问题原因
你提取数据时返回的是Pandas的Series对象(包含索引、列名等元信息),而非纯数值,导致无法直接求和。
解决方案
方法1:遍历提取单个数值(适合单国家单条数据场景)
通过loc定位行和列,再用iloc[0]提取Series中的唯一数值:
import pandas as pd def get_sa_female_pop(year): # 读取人口数据CSV pop_df = pd.read_csv('population.csv') # 南美洲国家列表(根据你的实际数据调整) sa_countries = ['巴西', '阿根廷', '秘鲁', '哥伦比亚', '智利', '委内瑞拉'] female_pop_list = [] for country in sa_countries: # 精准定位对应国家、对应年份的女性人口数值 pop_value = pop_df.loc[pop_df['国家'] == country, f"{year}_女性人口"].iloc[0] female_pop_list.append(pop_value) # 直接求和 total = sum(female_pop_list) return female_pop_list, total # 调用示例 pop_list, total_pop = get_sa_female_pop(2020) print(f"纯数值列表:{pop_list}") print(f"总人口:{total_pop}")
方法2:批量筛选(更高效,无需循环)
利用isin批量筛选所有南美洲国家,直接提取整列转成纯数值列表:
import pandas as pd def get_sa_female_pop(year): pop_df = pd.read_csv('population.csv') sa_countries = ['巴西', '阿根廷', '秘鲁', '哥伦比亚', '智利'] # 筛选所有南美洲国家的行 sa_pop_df = pop_df[pop_df['国家'].isin(sa_countries)] # 提取目标年份列,转成纯数值列表(自动忽略索引和列信息) female_pop_list = sa_pop_df[f"{year}_女性人口"].tolist() # 处理可能的缺失值(可选) # female_pop_list = sa_pop_df[f"{year}_女性人口"].dropna().tolist() total = sum(female_pop_list) return female_pop_list, total
关键说明
- 避免直接用
pop_df[(pop_df['国家'] == country)][列名],这种写法返回的是Series而非单个值 iloc[0]用于确保提取Series中的第一个(也是唯一的)数值,若你的数据中一个国家有多条数据,需根据需求调整逻辑- 批量筛选的方法更适合大数据量场景,性能优于循环遍历
内容的提问来源于stack exchange,提问作者Reptile Smile
相关产品推荐
相关产品推荐

