目录
一、Pandas DataFrame简介
-
核心概念:
-
Pandas:Python数据分析库,用于数据加载、清洗、转换、统计和可视化
-
DataFrame:处理结构化数据的二维表格结构(类似Excel/SQL表)
-
Series:单列数据容器,DataFrame由多个Series组成
-
-
核心功能:
import pandas as pd # 创建示例DataFrame data = {'Country': ['China', 'USA', 'Japan'], 'Population': [14, 3.3, 1.2]} df = pd.DataFrame(data)
二、数据加载与查看
1. 加载数据集
# 加载CSV/TSV文件
df = pd.read_csv('gapminder.csv') # CSV默认逗号分隔
df = pd.read_csv('gapminder.tsv', sep='\t') # TSV需指定分隔符
2. 查看数据属性
方法/属性 | 作用 | 示例 |
---|---|---|
| 获取行列数 |
|
| 查看列名 |
|
| 查看列数据类型 |
|
| 综合信息(含内存占用) | 输出各列非空值数量及类型 |
3. 查看部分数据
df.head(5) # 前5行
df.tail(3) # 后3行
df.sample(2) # 随机2行
三、数据切片与索引
1. 列数据提取
# 单列提取 → 返回Series
country_series = df['country']
# 多列提取 → 返回DataFrame
sub_df = df[['country', 'year', 'gdpPercap']]
2. 行数据提取
方法 | 场景 | 示例 |
---|---|---|
| 按标签索引 |
|
| 按位置索引 |
|
3. 行列混合提取
# 提取特定行+列
df.loc[10:15, ['country', 'lifeExp']] # 10-15行的国家与寿命
df.iloc[[0, 99, 999], [0, 3, 5]] # 第0/100/1000行的1/4/6列
注意:
loc
用标签,iloc
用位置索引,不可混用(df.loc[42,0]
会报错)
四、分组聚合计算
1. 分组核心逻辑
graph LR
A[原始数据] --> B[按条件分组]
B --> C[组内聚合计算]
C --> D[合并结果]
2. 分组聚合操作
# 按年份分组计算平均寿命
yearly_life = df.groupby('year')['lifeExp'].mean()
# 按大洲分组计算多列统计
continent_stats = df.groupby('continent').agg({
'lifeExp': 'mean',
'pop': ['sum', 'count'],
'gdpPercap': 'median'
})
输出示例:
continent | lifeExp_mean | pop_sum | pop_count | gdpPercap_median |
---|---|---|---|---|
Asia | 60.1 | 3.2e9 | 396 | 4471 |
Europe | 71.9 | 6e8 | 360 | 12081 |
3. 分组频数统计
# 统计各大洲国家数量
continent_counts = df['continent'].value_counts()
# 统计年份唯一值
unique_years = df['year'].nunique() # 输出年份种类数
五、基础数据绘图
1. 快速绘图
# 折线图:全球历年平均寿命变化
global_life = df.groupby('year')['lifeExp'].mean()
global_life.plot(title='Global Life Expectancy (1952-2007)')
# 柱状图:各大洲GDP中位数
df.groupby('continent')['gdpPercap'].median().plot(kind='bar')
2. 常用图表类型
参数 | 图表类型 | 适用场景 |
---|---|---|
| 折线图 | 时间趋势 |
| 柱状图 | 类别比较 |
| 直方图 | 数据分布 |
| 箱线图 | 离群值检测 |
六、实操技巧总结
-
数据加载优化:
-
只加载必要列:
pd.read_csv('data.csv', usecols=['col1','col2'])
-
处理大文件:
chunksize=1000
分块读取
-
-
分组聚合进阶:
# 多级分组:按大洲和年份 df.groupby(['continent','year'])['pop'].sum() # 自定义聚合函数 def data_range(x): return x.max() - x.min() df.groupby('country')['gdpPercap'].apply(data_range)
-
绘图增强:
import matplotlib.pyplot as plt plt.style.use('ggplot') # 使用专业绘图风格 # 添加图表元素 ax = yearly_life.plot(color='red', linestyle='--') ax.set_xlabel("Year") ax.set_ylabel("Life Expectancy") plt.savefig('life_expectancy.png') # 保存图像
学习建议:结合真实数据集(如
gapminder
)练习每个操作,使用print()
或Jupyter
即时查看输出结果,逐步构建分析思维。