- • DataFrame是Pandas的核心数据结构
- • 支持多种数据格式的读写
- • 提供强大的数据清洗功能
- • groupby实现类似SQL的聚合操作
5.2 Pandas数据分析
结构化数据处理的利器
🎯 学习目标
- 掌握Series和DataFrame的使用
- 学会数据读取与写入
- 掌握数据清洗与转换
- 了解数据聚合与分组操作
📊 Series与DataFrame
Series - 一维数据
import pandas as pd
# 创建Series
s = pd.Series([1, 2, 3, 4, 5],
index=['a', 'b', 'c', 'd', 'e'])
print(s['a']) # 1
print(s[1:3]) # b:2, c:3
# 属性
print(s.values) # 数组
print(s.index) # 索引
print(s.dtype) # 数据类型
DataFrame - 二维表格
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'city': ['NY', 'LA', 'SF']
})
print(df.head()) # 前5行
print(df.shape) # (3, 3)
print(df.columns) # 列名
print(df.dtypes) # 各列类型
📁 数据读取与写入
import pandas as pd
# CSV文件
df = pd.read_csv('data.csv')
df.to_csv('output.csv', index=False)
# Excel文件
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
df.to_excel('output.xlsx', index=False)
# JSON文件
df = pd.read_json('data.json')
df.to_json('output.json', orient='records')
# SQL数据库
from sqlalchemy import create_engine
engine = create_engine('sqlite:///database.db')
df = pd.read_sql('SELECT * FROM users', engine)
df.to_sql('users', engine, if_exists='replace')
# Parquet(大数据推荐)
df = pd.read_parquet('data.parquet')
df.to_parquet('output.parquet')
🔍 数据选择与过滤
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 30, 35, 28],
'salary': [50000, 60000, 70000, 55000]
})
# 选择列
print(df['name'])
print(df[['name', 'age']])
# 选择行
print(df.loc[0]) # 按标签
print(df.iloc[0]) # 按位置
print(df.loc[0:2, ['name', 'age']])
# 条件过滤
print(df[df['age'] > 28])
print(df[(df['age'] > 25) & (df['salary'] > 55000)])
# 查询方法
print(df.query('age > 28 and salary > 60000'))
🧹 数据清洗
缺失值处理
# 检测缺失值
print(df.isnull().sum())
# 删除缺失值
df_clean = df.dropna()
df_clean = df.dropna(subset=['age'])
# 填充缺失值
df_filled = df.fillna(0)
df_filled = df.fillna({'age': 0, 'name': 'Unknown'})
df_filled = df['age'].fillna(df['age'].mean())
重复值处理
# 检测重复
print(df.duplicated().sum())
# 删除重复
df_unique = df.drop_duplicates()
# 按列去重
df_unique = df.drop_duplicates(
subset=['name'],
keep='first' # 保留第一个
)
📈 分组与聚合
df = pd.DataFrame({
'department': ['IT', 'HR', 'IT', 'HR', 'IT'],
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'salary': [70000, 50000, 80000, 55000, 75000]
})
# 分组聚合
result = df.groupby('department').agg({
'salary': ['mean', 'sum', 'count'],
'name': 'count'
})
# 多层分组
result = df.groupby(['department', 'name']).sum()
# 自定义聚合
result = df.groupby('department').agg(
avg_salary=('salary', 'mean'),
total=('salary', 'sum'),
count=('salary', 'count')
)
# 转换
df['dept_avg'] = df.groupby('department')['salary'].transform('mean')
📝 本节小结
✅