目录
引言
Pandas是Python数据分析的核心库,提供了高效便捷的数据结构和数据分析工具。无论是数据清洗、转换、分析还是可视化,Pandas都能完美胜任。
一、Pandas环境配置与核心概念
1.1 安装Pandas
pip install pandas
1.2 导入惯例
import pandas as pd # 行业标准缩写
import numpy as np # 常配合使用
1.3 核心数据结构
Series:带标签的一维数组
DataFrame:二维表格型数据结构(核心)
二、数据结构详解
2.1 Series创建与操作
# 从列表创建
s = pd.Series([10, 20, 30, 40],
index=['a', 'b', 'c', 'd'],
name='sales')
# 从字典创建
data = {'北京': 2154, '上海': 2428, '广州': 1867}
city_series = pd.Series(data)
# 常用操作
print(s.values) # 值数组 [10 20 30 40]
print(s.index) # 索引 Index(['a','b','c','d'])
2.2 DataFrame创建
# 从字典创建
data = {
'城市': ['北京', '上海', '广州', '深圳'],
'人口(万)': [2154, 2428, 1867, 1756],
'GDP(万亿)': [3.92, 4.32, 2.82, 3.24]
}
df = pd.DataFrame(data)
# 从CSV文件创建
df = pd.read_csv('data.csv', encoding='utf-8')
# 从excel文件创建
df = pd.read_excel('data.xlsx', encoding='utf-8')
三、数据查看与基本操作
3.1 数据预览
df.head(3) # 查看前3行
df.tail() # 查看后5行(默认)
df.sample(5) # 随机查看5行
df.describe() # 数值型统计概览
3.2 索引与选择
# 列选择
df['城市'] # 单列 → Series
df[['城市','GDP']] # 多列 → DataFrame
# 行选择
df.loc[1] # 按标签选择行
df.iloc[0:3] # 按位置切片
# 布尔索引
df[df['人口'] > 2000]
3.3 数据排序
df.sort_values('GDP', ascending=False) # 按GDP降序
df.sort_index(ascending=False) # 按索引倒序
四、数据清洗实战
4.1 处理缺失值
# 识别缺失值
df.isnull().sum()
# 填充缺失值
df.fillna({'人口': df['人口'].mean()}, inplace=True)
# 删除缺失值
df.dropna(subset=['GDP'], inplace=True)
4.2 处理重复值
df.duplicated() # 标记重复行
df.drop_duplicates() # 删除重复行
4.3 数据类型转换
df['人口'] = df['人口'].astype(int)
df['日期'] = pd.to_datetime(df['日期'])
4.4 字符串处理
df['城市'] = df['城市'].str.upper() # 转大写
df['地址'] = df['地址'].str.replace('市', '') # 替换字符
五、数据处理进阶
5.1 数据筛选
# 多条件筛选
df[(df['人口'] > 2000) & (df['GDP'] < 4)]
# 使用query方法
df.query("2000 < 人口 < 2500 and GDP > 3")
5.2 列操作
# 新增计算列
df['人均GDP'] = df['GDP'] / df['人口'] * 10000
# 重命名列
df.rename(columns={'人口(万)': '人口'}, inplace=True)
# 删除列
df.drop(columns=['序号'], inplace=True)
5.3 应用函数
def classify_gdp(value):
if value > 4: return '高'
elif value > 3: return '中'
else: return '低'
df['GDP等级'] = df['GDP'].apply(classify_gdp)
六、数据分组与聚合
6.1 基础分组
# 按单列分组
grouped = df.groupby('地区')
# 按多列分组
grouped = df.groupby(['年份', '季度'])
6.2 聚合计算
agg_df = df.groupby('城市').agg({
'人口': ['mean', 'max', 'min'],
'GDP': 'sum'
})
6.3 透视表
pivot_df = pd.pivot_table(df,
values='销售额',
index='地区',
columns='季度',
aggfunc=np.sum)
七、数据合并与连接
7.1 纵向合并
combined = pd.concat([df1, df2], axis=0) # 行合并
7.2 横向合并
merged = pd.merge(df1, df2,
on='ID',
how='inner') # 内连接
7.3 数据连接
joined = df1.join(df2.set_index('ID'),
on='ID',
how='left')
八、时间序列处理
8.1 时间索引
df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)
# 按年统计
df.resample('Y').sum()
# 滑动窗口
df.rolling(window=7).mean() # 7天移动平均
九、数据可视化
9.1 内置可视化
df.plot(kind='line', y='销售额', title='销售趋势')
df['GDP'].plot(kind='hist', bins=20)
9.2 结合Matplotlib
import matplotlib.pyplot as plt
plt.figure(figsize=(10,6))
df.groupby('城市')['人口'].mean().plot(kind='bar')
plt.title('各城市平均人口')
plt.show()
十、实战案例:电商数据分析
# 1. 数据加载
orders = pd.read_csv('orders.csv')
products = pd.read_csv('products.csv')
# 2. 数据合并
merged = pd.merge(orders, products, on='product_id')
# 3. 计算销售额
merged['sales'] = merged['quantity'] * merged['price']
# 4. 分析指标
daily_sales = merged.groupby('order_date')['sales'].sum()
top_products = merged.groupby('product_name')['sales'].sum().nlargest(5)
# 5. 可视化展示
daily_sales.plot(title='每日销售额趋势')
top_products.plot(kind='pie', autopct='%.1f%%')
结语
Pandas是数据分析领域的瑞士军刀,本文涵盖了其80%的常用功能。建议通过以下方式精进:
每天处理一个真实数据集
掌握高效查询方法(
.query()
、.eval()
)深入理解分组聚合机制
学习性能优化技巧(向量化操作)