学习Pandas:Python数据分析的利器
一、什么是Pandas?
Pandas是Python中用于数据分析和处理的核心库,提供了高效的数据结构和数据分析工具。它由Wes McKinney于2008年开发,名字来源于“Panel Data”(面板数据)和“Python Data Analysis”。Pandas擅长处理表格型数据(如Excel、CSV文件),是数据清洗、探索性分析的必备工具。
为什么使用Pandas?
- 高效:底层基于NumPy,速度远超纯Python代码。
- 易用:丰富的API和直观的语法。
- 灵活:支持多种数据格式(CSV、Excel、SQL、JSON等)。
- 生态友好:与NumPy、Matplotlib、Scikit-learn等库无缝衔接。
二、安装与导入
安装
pip install pandas
#使用清华大学的镜像,推荐国内用户使用
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
导入
import pandas as pd # 常用别名为pd
三、核心概念
1. 数据结构
Pandas主要有两种数据结构:Series和DataFrame。
(1)Series
一维带标签的数组,类似列表,但支持更复杂的数据操作。
# 创建Series
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s)
# 输出:
# a 10
# b 20
# c 30
# dtype: int64
(2)DataFrame
二维表格型数据结构,由多列组成。
# 创建DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35]
}
df = pd.DataFrame(data)
print(df)
# 输出:
# Name Age
# 0 Alice 25
# 1 Bob 30
# 2 Charlie 35
2. 关键属性
- 索引(index):行标签,类似Excel的行号。
- 列(columns):列名,类似Excel的列标题。
- 值(values):返回NumPy数组形式的数据。
四、常用操作
1. 数据读写
读取数据
# 读取CSV文件
df = pd.read_csv('data.csv')
# 读取Excel文件
df = pd.read_excel('data.xlsx')
写入数据
# 保存为CSV
df.to_csv('output.csv', index=False)
# 保存为Excel
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)
2. 数据查看
查看前几行/后几行
print(df.head(2)) # 显示前2行
print(df.tail(3)) # 显示后3行
查看数据信息
print(df.info()) # 显示数据类型、非空值等
print(df.describe()) # 显示数值列的统计信息(均值、标准差等)
3. 数据选择
按列选择
# 单列
ages = df['Age']
# 多列
subset = df[['Name', 'Age']]
按行选择
# 前3行
first_three = df[:3]
# 使用loc(按标签)和iloc(按位置)
row_0 = df.loc[0] # 第0行
rows_0_2 = df.iloc[0:3] # 前3行(索引0到2)
4. 数据清洗
处理缺失值
# 删除包含缺失值的行
cleaned_df = df.dropna()
# 填充缺失值
df['Age'].fillna(0, inplace=True) # 用0填充Age列的缺失值
去重与重命名
# 删除重复行
df.drop_duplicates(inplace=True)
# 重命名列
df.rename(columns={'Age': 'Age_Years'}, inplace=True)
5. 数据筛选
# 筛选年龄大于30的记录
adults = df[df['Age'] > 30]
# 多条件筛选(年龄>30且名字以'B'开头)
selected = df[(df['Age'] > 30) & (df['Name'].str.startswith('B'))]
6. 数据聚合
分组与聚合(GroupBy)
# 按性别分组,计算平均年龄
grouped = df.groupby('Gender')['Age'].mean()
常用聚合函数
- sum(), mean(), count(), max(), min()
7. 数据合并
横向合并(merge)
# 合并两个DataFrame
merged = pd.merge(left_df, right_df, on='Key')
纵向合并(concat)
# 沿轴0(行)合并
combined = pd.concat([df1, df2], axis=0)
五、实战案例:分析Titanic数据
1. 加载数据
titanic = pd.read_csv('titanic.csv')
2. 数据探索
# 查看前3行
print(titanic.head(3))
# 查看统计信息
print(titanic.describe())
# 检查缺失值
print(titanic.isnull().sum())
3. 数据清洗
# 删除缺失值较多的列
titanic.drop(['Cabin'], axis=1, inplace=True)
# 填充年龄缺失值为平均值
titanic['Age'].fillna(titanic['Age'].mean(), inplace=True)
4. 分析与可视化
生存率分析
# 按性别统计生存人数
survived = titanic.groupby('Sex')['Survived'].sum()
print(survived)
# 绘制柱状图
import matplotlib.pyplot as plt
survived.plot(kind='bar')
plt.title('Survival by Gender')
plt.show()
六、高级功能
1. 时间序列处理
# 将字符串转为日期
df['Date'] = pd.to_datetime(df['Date'])
# 按月聚合
monthly_sales = df.resample('M', on='Date')['Sales'].sum()
2. 数据透视表(pivot_table)
pivot = pd.pivot_table(
data=df,
values='Sales',
index='Product',
columns='Region',
aggfunc='sum'
)
七、总结与实践建议
重点回顾
- 数据结构:Series和DataFrame是核心。
- 常用操作:读写、筛选、聚合、合并。
- 实践:从简单的数据集(如Titanic、Iris)开始练习。
练习建议
- 用Pandas处理一个CSV文件,完成数据清洗和基础分析。
- 尝试使用groupby和pivot_table进行多维度分析。
- 结合Matplotlib/Seaborn绘制图表。
八、常见问题解答
Q:为什么我的数据读取后索引不对?
A:使用pd.read_csv(index_col=0)指定索引列,或用df.set_index('列名')重置索引。
Q:如何快速统计某一列的唯一值?
A:用df['列名'].unique()或df['列名'].value_counts()。
Q:如何处理字符串列?
A:使用.str方法,如df['Name'].str.lower()将字符串转为小写。
通过掌握Pandas,你将能高效处理数据,为机器学习、可视化等进阶任务打下坚实基础。动手实践是关键,祝你学习顺利!