Pandas实战闯关(从数据导入到重塑)
1. Pandas入门:从零开始的数据处理之旅
第一次接触Pandas时,我完全被它的强大功能震撼到了。这个Python库就像是数据分析师的瑞士军刀,能轻松处理各种结构化数据。想象一下,你手里有一堆杂乱无章的Excel表格和CSV文件,Pandas能帮你把它们变成整齐划一、易于分析的数据集。
安装Pandas非常简单,只需要在命令行输入:
pip install pandas
安装完成后,我们通常会这样导入它:
import pandas as pd
Pandas最核心的两个数据结构是 Series 和 DataFrame 。Series就像是一个带标签的一维数组,而DataFrame则是二维的表格型数据结构,可以理解为多个Series的集合。举个例子,创建一个Series就像在Python中创建列表一样简单:
import pandas as pd
s = pd.Series([1, 3, 5, 7], index=['a', 'b', 'c', 'd'])
print(s)
2. 数据导入:让杂乱数据井井有条
在实际项目中,我们很少从零开始创建数据,更多时候需要从外部文件导入。Pandas支持多种数据格式,包括CSV、Excel、JSON、SQL等。我最常用的是CSV文件导入:
df = pd.read_csv('data.csv')
这里有几个实用技巧:
- 如果文件没有表头,可以设置
header=None - 可以指定编码方式,比如
encoding='utf-8' - 可以只读取特定列,使用
usecols参数
我曾经处理过一个英国降雨量的数据集,原始数据列名非常混乱,我是这样处理的:
df = pd.read_csv('uk_rain_2014.csv', header=0)
df.columns = ['water_year','rain_octsep','outflow_octsep','rain_decfeb',
'outflow_decfeb', 'rain_junaug', 'outflow_junaug']
3. 数据清洗:打造干净的数据集
拿到数据后,清洗是必不可少的步骤。常见的问题包括缺失值、重复值和异常值。
处理缺失值有三种主要方法:
- 直接删除:
df.dropna() - 填充固定值:
df.fillna(0) - 使用统计量填充:
df.fillna(df.mean())
去重操作也很简单:
df = df.drop_duplicates()
我曾经遇到一个数据集,其中包含大量重复的观测记录。使用 drop_duplicates() 后,数据量从10万行减少到7万行,大大提高了后续分析的效率。
4. 数据筛选与排序:快速找到你需要的信息
Pandas提供了强大的数据筛选能力。比如,要筛选出年龄大于30的记录:
df[df['age'] > 30]
排序操作同样简单直观。可以按索引排序:
s.sort_index()
也可以按值排序:
df.sort_values(by='salary')
在实际项目中,我经常需要按多个条件排序。比如先按部门排序,再按薪资降序排列:
df.sort_values(by=['department', 'salary'], ascending=[True, False])
5. 数据合并:整合多源数据
当数据分散在多个表格中时,我们需要合并它们。Pandas提供了多种合并方式:
- concat :简单拼接
pd.concat([df1, df2])
- merge :基于键的合并,类似SQL的JOIN
pd.merge(df1, df2, on='key')
- join :基于索引的合并
df1.join(df2)
我曾经处理过一个电商项目,需要将用户信息、订单信息和产品信息三个表合并。使用 merge 操作后,成功构建了一个完整的分析数据集。
6. 数据重塑:改变数据的组织结构
有时候我们需要改变数据的形状,Pandas提供了多种重塑方法:
- pivot :将长格式转为宽格式
df.pivot(index='date', columns='product', values='sales')
- melt :将宽格式转为长格式
pd.melt(df, id_vars=['id'], value_vars=['Q1', 'Q2', 'Q3', 'Q4'])
- stack/unstack :处理层次化索引
stacked = df.stack()
unstacked = stacked.unstack()
在处理销售数据时,我经常需要使用 pivot 来生成按产品和时间维度的交叉表,这对后续的可视化分析非常有帮助。
7. 分组与聚合:发现数据中的模式
分组操作是数据分析的核心。Pandas的 groupby 功能非常强大:
df.groupby('department')['salary'].mean()
可以一次计算多个统计量:
df.groupby('department').agg({'salary': ['mean', 'min', 'max'],
'age': 'median'})
我曾经用这个功能分析过员工流失率,按部门分组后计算离职率,发现了某些部门的异常情况。
8. 实战案例:完整的数据处理流程
让我们通过一个完整的例子,将上述技巧串联起来。假设我们有一个销售数据集,需要进行以下处理:
- 读取数据并检查基本信息
df = pd.read_csv('sales.csv')
print(df.info())
print(df.head())
- 处理缺失值
df = df.fillna({'region': 'Unknown', 'sales': 0})
- 按地区和产品分组计算总销售额
sales_summary = df.groupby(['region', 'product'])['sales'].sum().unstack()
- 计算各产品的销售占比
sales_pct = sales_summary.div(sales_summary.sum(axis=1), axis=0)
- 保存处理后的数据
sales_summary.to_csv('sales_summary.csv')
sales_pct.to_csv('sales_pct.csv')
这个流程涵盖了从数据导入到最终输出的完整环节,在实际工作中非常实用。
更多推荐



所有评论(0)