本文目录导读:

Python的Pandas库是数据分析的核心工具,它提供了大量高效、灵活的数据处理功能,对于数据分析,最常用的功能可以归纳为以下几个核心方面:
数据读取与写入(I/O)
这是数据分析的第一步和最后一步。
- 读取:
pd.read_csv('file.csv'):读取 CSV 文件(最常用)。pd.read_excel('file.xlsx', sheet_name='Sheet1'):读取 Excel 文件。pd.read_sql('SELECT * FROM table', connection):从 SQL 数据库读取。pd.read_json('data.json'):读取 JSON 格式数据。pd.read_parquet('data.parquet'):读取 Parquet 格式(大数据场景常用,速度极快)。
- 写入:
df.to_csv('output.csv', index=False):保存为 CSV。df.to_excel('output.xlsx', sheet_name='Data'):保存为 Excel。df.to_sql('table_name', con, if_exists='replace'):写入数据库。
数据预览与基本信息
在拿到数据后,先了解数据的全貌。
df.head(n)/df.tail(n):查看前/后 n 行数据(默认 5 行)。df.info():查看数据集的概览,包括索引类型、列名、非空值数量、数据类型(dtype)及内存使用量。这是最常用的诊断方法。df.describe():生成数值型列的描述性统计(计数、均值、标准差、最小值、四分位数、最大值)。df.shape:返回 (行数, 列数) 的元组。df.columns:返回列名列表。df.dtypes:查看每列的数据类型。
数据选择与过滤
这是清理和准备数据时最频繁的操作。
- 列选择:
df['column_name']:选择单列(返回 Series)。df[['col1', 'col2']]:选择多列(返回 DataFrame)。
- 行选择(过滤):
df[df['age'] > 30]:布尔索引,选择年龄大于30的行。df.query('age > 30 & city == "北京"'):使用类似 SQL 的表达式进行复杂过滤(可读性高)。
- 按位置/标签选择(
.iloc和.loc):df.iloc[0:5, 2:4]:按整数位置选择(前5行,第2到第4列)。df.loc[df['score'] > 90, ['name', 'score']]:按标签或布尔数组选择(选择分数>90的学生的名字和分数)。
数据清洗(重中之重)
现实中大部分数据都是不完美的,清洗占据了数据分析大量时间。
- 处理缺失值:
df.isnull().sum():检查每列有多少缺失值。df.dropna():删除包含缺失值的行(axis=0)或列(axis=1)。df.fillna(value):填充缺失值(df.fillna(0)或df['age'].fillna(df['age'].mean()))。
- 处理重复值:
df.duplicated():检查重复行。df.drop_duplicates():删除重复行(可指定subset=['col1']按列去重)。
- 数据类型转换:
df['date'].astype('datetime64[ns]'):转换列的数据类型。pd.to_datetime(df['date_column']):万能日期类型转换函数。df['price'].astype(float):转换为浮点数。
- 修改列名:
df.rename(columns={'old_name': 'new_name'})。df.columns = ['new_col1', 'new_col2'](直接赋值,必须长度相同)。
- 替换与映射:
df['gender'].replace({'男': 1, '女': 0}):替换值。df['category'].map({'A': '优秀', 'B': '良好'}):映射新值。
数据分组与聚合(分组分析)
这是数据分析的核心,用于探索各维度的统计规律。
- 基础分组:
df.groupby('department')['salary'].mean():按部门分组,计算平均工资。
- 多列分组与多聚合:
df.groupby(['city', 'gender']).agg({'age': 'mean', 'income': 'sum', 'id': 'count'}):按城市和性别分组,同时计算平均年龄、收入总和、用户数量。
- 常用聚合函数:
sum(),mean(),count(),max(),min(),std(),var(),median()。 - 透视表(Pivot Tables):
pd.pivot_table(df, values='sales', index='region', columns='month', aggfunc='sum', fill_value=0):生成类似 Excel 透视表的交叉分析报表。
数据合并与连接
当数据分散在多个表时,需要将它们合并。
- 类似 SQL 的 Join:
pd.merge(df1, df2, on='key', how='inner'):内连接(inner),外连接(left,right,outer)。
- 按行/列拼接:
pd.concat([df1, df2], axis=0):纵向拼接(增加行)。pd.concat([df1, df2], axis=1):横向拼接(增加列)。
数据排序与排名
- 排序:
df.sort_values(by='price', ascending=False):按价格降序排列。df.sort_index():按行索引排序。
- 排名:
df['rank'] = df['score'].rank(method='dense', ascending=False):为分数排名(dense方法确保并列不占位次)。
时间序列分析
- 创建日期范围:
pd.date_range('2024-01-01', periods=100, freq='D')生成日期序列。
- 设置时间索引:
df.set_index('date', inplace=True):将日期列设为索引。
- 重采样:
df.resample('M').mean():按月(M)重采样,计算月均值。df.resample('W').sum():按周求和。
- 移动窗口与差分:
df['sales_ma'] = df['sales'].rolling(window=7).mean():计算7日移动平均线。df['sales_diff'] = df['sales'].diff():计算环比差值。
常用的便捷方法
df.apply(func, axis=1):对每一行或每一列应用自定义函数。注意:如果追求性能,优先考虑向量化操作或transform。df.transform(func):执行与groupby结合的分组变换(计算组内百分比)。df.pipe(func):实现函数式编程,将整个 DataFrame 传递给一个函数,非常利于创建可读性高的数据处理管道。df.sample(n=10):随机抽取 n 行数据。
一个完整的小例子(快速体验)
import pandas as pd
import numpy as np
# 1. 读取数据
df = pd.read_csv('sales_data.csv') # 假设有这样一个文件
# 2. 预览
print(df.head())
print(df.info())
# 3. 清洗
df.dropna(subset=['price'], inplace=True) # 删除价格缺失的行
df['date'] = pd.to_datetime(df['date']) # 转换日期格式
df.fillna({'quantity': 0}, inplace=True) # 数量缺失填充0
# 4. 分析:按类别统计总销售额
df['total_sales'] = df['price'] * df['quantity']
category_summary = df.groupby('category')['total_sales'].sum().sort_values(ascending=False)
print(category_summary)
# 5. 时间序列:按周统计销量趋势
weekly_sales = df.set_index('date').resample('W')['total_sales'].sum()
print(weekly_sales.head(10))
如果你刚开始学,建议先重点掌握 1-5 部分(读写、预览、选择、清洗、分组),它们能覆盖日常工作中 80% 以上的场景,Pandas 官方文档的 10 Minutes to pandas 是极好的入门教程。