Pandas 数据分析:DataFrame 操作入门

FreeGuideOnline 最新 2026-06-16

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['城市'] == '上海')]

使用 lociloc

  • 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 或电商订单),反复练习上述操作,逐步提升数据处理能力。