Pandas 数据分析:DataFrame 操作入门
Pandas 数据分析:DataFrame 操作入门
什么是Pandas?
Pandas 是 Python 中最核心的数据分析库,它提供了快速、灵活且富有表现力的数据结构,旨在让数据处理变得简单直观。核心数据结构是 DataFrame —— 一个二维表格,类似于 Excel 表格或 SQL 表,每列可以是不同的数据类型。无论是金融、统计、社会科学还是工程领域,Pandas 都是数据清洗、转换和分析的首选工具。
环境准备与安装
在使用之前,确保已安装 Pandas。推荐使用 pip 或 conda 进行安装:
pip install pandas
导入时通常采用别名 pd,同时我们常配合 NumPy 一起使用,以便生成示例数据:
import pandas as pd
import numpy as np
创建 DataFrame
创建 DataFrame 有多种方式,最常用的是从字典或外部文件(如 CSV)加载。
从字典创建
字典的键会成为列名,值(列表或数组)会成为列数据。
data = {
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [25, 30, 22, 28],
'城市': ['北京', '上海', '广州', '深圳'],
'薪资': [8000, 12000, 9000, 11000]
}
df = pd.DataFrame(data)
print(df)
从 CSV 文件读取
使用 pd.read_csv() 是实际工作中最常见的方式。
df = pd.read_csv('data.csv')
# 常见参数:sep 指定分隔符,encoding 指定编码,header 指定标题行
df = pd.read_csv('data.csv', encoding='utf-8')
数据查看与基本信息
拿到一个 DataFrame 后,首先需要快速了解它的概貌。
基础查看方法
df.head(n):查看前 n 行,默认 5 行df.tail(n):查看后 n 行df.shape:返回 (行数, 列数)df.columns:返回列名索引对象df.dtypes:查看每列的数据类型df.info():打印数据框的简要摘要,包括非空值数量和内存使用情况
print(df.head())
print(df.shape) # (4, 4)
print(df.columns) # Index(['姓名', '年龄', '城市', '薪资'], dtype='object')
print(df.dtypes)
快速统计摘要
df.describe() 会生成数值列的描述性统计量:计数、均值、标准差、最小值、四分位数和最大值。
print(df.describe())
数据选择与过滤
精准地选取行列是 DataFrame 操作的核心技能。
选择单列或多列
使用列名列表选取子集,返回新的 DataFrame。
# 选择单列,返回 Series
ages = df['年龄']
# 选择多列
subset = df[['姓名', '薪资']]
条件过滤(布尔索引)
通过条件表达式生成布尔 Series,再用它筛选行。
# 筛选年龄大于 25 的记录
df[df['年龄'] > 25]
# 多重条件:与 (&) 、或 (|) ,注意条件必须用小括号括起来
df[(df['年龄'] > 25) & (df['城市'] == '上海')]
使用 loc 和 iloc
loc:基于标签(行索引和列名)进行选择iloc:基于整数位置进行选择(从0开始)
# loc 示例:选择索引为 0 到 1 的行,'姓名' 和 '城市' 列
df.loc[0:1, ['姓名', '城市']]
# iloc 示例:选择前两行,第一列和第三列
df.iloc[0:2, [0, 2]]
数据清洗
真实的原始数据往往存在缺失、重复等问题,清洗是分析的前提。
处理缺失值
df.isnull()或df.notnull():检测缺失值df.dropna():删除包含缺失值的行或列df.fillna(value):用指定值填充缺失值
# 假设 df 中包含 NaN
df.dropna() # 删除任何含有缺失值的行
df.fillna(0) # 用0填充
df['年龄'].fillna(df['年龄'].mean(), inplace=True) # 用均值填充某列
删除重复行
df.drop_duplicates() 可以去掉重复的数据,通过 subset 参数指定依据哪些列判断重复。
df.drop_duplicates(inplace=True)
# 根据 '姓名' 列去重,保留第一次出现的值
df.drop_duplicates(subset=['姓名'], keep='first', inplace=True)
重命名列
df.rename(columns={'旧名':'新名'}) 可以修改列名。
df.rename(columns={'薪资':'月薪'}, inplace=True)
数据排序
使用 sort_values() 按一列或多列进行排序。
# 按年龄升序排列
df.sort_values(by='年龄', ascending=True, inplace=True)
# 先按城市降序,再按薪资升序
df.sort_values(by=['城市', '薪资'], ascending=[False, True])
添加与删除列
DataFrame 可以动态增删列。
增加新列
可以直接赋值一个新列名,或者基于现有列计算生成。
# 增加一列 '奖金',为薪资的20%
df['奖金'] = df['月薪'] * 0.2
# 使用 insert() 在指定位置插入列
df.insert(2, '性别', ['男', '男', '女', '男'])
删除列
使用 drop() 并指定 axis=1(或 columns 参数)。
df.drop('奖金', axis=1, inplace=True)
# 或者 df.drop(columns=['奖金'], inplace=True)
分组聚合
类似 SQL 的 GROUP BY,Pandas 的 groupby() 可以对数据进行分组并执行聚合计算。
# 按城市分组,计算平均薪资
city_mean = df.groupby('城市')['月薪'].mean()
print(city_mean)
# 分组后应用多个聚合函数
agg_result = df.groupby('城市').agg(
平均薪资=('月薪', 'mean'),
最高薪资=('月薪', 'max'),
人数=('姓名', 'count')
).reset_index()
print(agg_result)
常用的聚合函数有 sum, mean, max, min, count, std, median 等。
数据透视表
Pandas 提供了类似 Excel 的数据透视表功能 pivot_table(),非常适合多维度汇总。
# 假设有销售数据,按商品和地区统计销售总额
pivot = df.pivot_table(
values='销售额',
index='商品',
columns='地区',
aggfunc='sum',
fill_value=0
)
保存处理后的数据
分析完成后,通常需要将结果输出为文件。
# 保存为 CSV,不保存行索引
df.to_csv('cleaned_data.csv', index=False, encoding='utf-8-sig')
# 保存为 Excel,需要安装 openpyxl 或 xlwt
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)
总结
通过本教程,你已经掌握了 Pandas DataFrame 的核心操作流程:从创建数据、快速查看、灵活选取、清洗脏数据,到排序、新增列、分组聚合和最终导出。这些技能可以应对大部分日常数据分析任务。接下来,建议你动手加载一个真实的 CSV 数据集(如 Kaggle 的 Titanic 或电商订单),反复练习上述操作,逐步提升数据处理能力。