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

Python新手求助:如何筛选2018年数据绘制预期寿命与GDP散点图?

筛选2018年数据绘制散点图的解决方案

你需要从包含1950-2018年的6万行数据中提取2018年的记录来绘图,同时保留原数据集,核心思路是生成一个仅包含2018年数据的子数据集,而非修改原始数据。

修改后的代码

import pandas as pd
import matplotlib.pyplot as plt

# 读取完整数据集,原数据保持不变
df = pd.read_csv('GDP_LE_2018.csv')

# 筛选2018年的数据,生成新的DataFrame,原始df不受任何改动
df_2018 = df[df['Year'] == 2018]

# 从筛选后的子集中提取绘图所需的列
le_2018 = df_2018['Life expectancy']
gdp_2018 = df_2018['GDP per capita']

# 绘制散点图
plt.scatter(gdp_2018, le_2018)
plt.xlabel('人均GDP')
plt.ylabel('预期寿命')
plt.title('2018年人均GDP与预期寿命散点图')
plt.show()

核心解释

  • 你之前的代码已经筛选出了year1(也就是这里的df_2018),但没有用它来提取Life expectancy和GDP per capita,而是直接用了整个数据集的列,所以才会包含所有年份的数据。
  • df[df['Year'] == 2018]会创建一个全新的DataFrame,只包含年份为2018的行,原始的df依然完整保留,完全符合你“不删除原数据”的要求。

进阶优化(针对大型数据集)

如果数据集特别大,全量读取会占用较多内存,可以在读取CSV时直接筛选2018年的数据,减少内存消耗:

# 读取时仅加载2018年的数据,原数据集文件无变化
df_2018 = pd.read_csv(
    'GDP_LE_2018.csv',
    # 跳过非表头且年份不是2018的行
    skiprows=lambda row_num: row_num != 0 and pd.read_csv('GDP_LE_2018.csv', nrows=1, skiprows=row_num-1)['Year'].iloc[0] != 2018
)

不过这种写法逻辑稍复杂,入门阶段优先用全量读取后筛选的方式,更易理解和调试。

内容的提问来源于stack exchange,提问作者Floris ter Haar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:01:06