别再死记硬背了!用Pandas处理Excel和CSV数据的5个高频场景(附代码)
·
别再死记硬背了!用Pandas处理Excel和CSV数据的5个高频场景(附代码)
刚接触数据分析时,最让人头疼的莫过于面对一堆杂乱无章的Excel或CSV文件。业务部门发来的数据可能包含重复记录、缺失值、格式混乱等问题,而你的任务是在最短时间内将其整理成可分析的整洁数据。Pandas作为Python数据分析的瑞士军刀,能帮你高效解决这些实际问题。
我刚开始工作时,经常为了处理一个简单的数据合并任务而折腾半天。后来发现,掌握Pandas的几个核心场景就能解决80%的日常数据处理需求。下面分享5个最实用的场景,每个都配有可直接运行的代码示例。
1. 数据合并:快速整合多个来源的业务数据
业务部门经常提供多个Excel文件,每个文件包含部分数据。传统做法是手动复制粘贴,既耗时又容易出错。Pandas的concat和merge函数能完美解决这个问题。
1.1 纵向合并相同结构的数据
假设你收到三个部门的销售数据,结构相同但分散在不同文件中:
import pandas as pd
# 读取三个部门的Excel文件
dept1 = pd.read_excel('sales_dept1.xlsx')
dept2 = pd.read_excel('sales_dept2.xlsx')
dept3 = pd.read_excel('sales_dept3.xlsx')
# 使用concat合并
all_sales = pd.concat([dept1, dept2, dept3], ignore_index=True)
注意:ignore_index=True会重置行索引,避免出现重复索引
1.2 横向关联不同数据表
当需要根据ID关联客户信息和订单数据时:
customers = pd.read_csv('customers.csv')
orders = pd.read_csv('orders.csv')
# 根据customer_id关联两个表
merged_data = pd.merge(customers, orders, on='customer_id', how='left')
合并方式对比表:
| 合并方式 | 说明 | 适用场景 |
|---|---|---|
| inner | 只保留两表都有的键 | 数据完全匹配时 |
| left | 保留左表所有记录 | 以左表为基准 |
| right | 保留右表所有记录 | 以右表为基准 |
| outer | 保留所有记录 | 需要全量数据时 |
2. 缺失值处理:智能填充不完整数据
真实业务数据总会有缺失,常见处理方法有:
- 删除缺失行:适合缺失比例小的数据
- 填充固定值:适合类别型变量
- 填充统计值:适合数值型变量
- 插值法:适合时间序列数据
2.1 自动填充缺失值
# 查看各列缺失情况
print(data.isnull().sum())
# 填充缺失值
data['age'] = data['age'].fillna(data['age'].median()) # 中位数填充
data['department'] = data['department'].fillna('Unknown') # 固定值填充
2.2 高级填充技巧
对于时间序列数据,可以使用插值法:
# 线性插值
data['sales'] = data['sales'].interpolate(method='linear')
# 向前填充
data['inventory'] = data['inventory'].fillna(method='ffill')
3. 重复数据处理:一键清理冗余记录
重复数据会扭曲分析结果,Pandas提供了多种去重方式:
3.1 基本去重方法
# 标记重复行
print(data.duplicated(subset=['order_id']))
# 删除完全重复的行
data.drop_duplicates(inplace=True)
# 基于关键字段去重
data.drop_duplicates(subset=['customer_id', 'order_date'], keep='last', inplace=True)
3.2 高级去重策略
有时需要先清洗数据再判断重复:
# 标准化文本后去重
data['product_name'] = data['product_name'].str.strip().str.lower()
data.drop_duplicates(subset=['product_name'], inplace=True)
4. 数据类型转换:规范数据格式
常见的数据类型问题包括:
- 数字存储为文本
- 日期识别为字符串
- 布尔值显示为是/否
4.1 基本类型转换
# 转换为数值类型
data['price'] = pd.to_numeric(data['price'], errors='coerce')
# 转换为日期类型
data['order_date'] = pd.to_datetime(data['order_date'], format='%Y-%m-%d')
# 转换为分类变量
data['category'] = data['category'].astype('category')
4.2 自定义转换函数
# 自定义转换函数
def convert_status(text):
return True if text.lower() == 'active' else False
data['is_active'] = data['status'].apply(convert_status)
5. 分组统计:快速生成业务洞察
分组统计是数据分析的核心操作,Pandas的groupby功能非常强大。
5.1 基本聚合计算
# 按地区统计销售总额和平均订单额
report = data.groupby('region').agg({
'sales': ['sum', 'mean'],
'order_id': 'count'
})
# 重命名列
report.columns = ['total_sales', 'avg_sale', 'order_count']
5.2 复杂分组分析
# 多级分组和多种聚合
result = data.groupby(['region', 'product_category']).agg({
'sales': ['sum', lambda x: x.sum() / x.count()],
'profit': ['mean', 'median']
})
# 添加百分比计算
result['sales_pct'] = result['sales']['sum'] / result['sales']['sum'].sum() * 100
实际项目中,我发现groupby结合agg可以解决90%的日常统计需求。一个常见错误是忘记reset_index(),导致分组列变成索引,影响后续操作:
# 正确做法
report = data.groupby('region').size().reset_index(name='counts')
掌握这5个核心场景后,你会发现Pandas处理日常业务数据变得异常简单。刚开始可能会忘记一些参数,但实践几次后就会形成肌肉记忆。建议把这些代码片段保存为代码模板,遇到类似任务时稍作修改就能使用。
更多推荐


所有评论(0)