跳转至

Pandas 数据处理

一句话概述:Pandas 是 Python 数据分析的核心库,DataFrame 让你像操作 Excel 一样处理表格数据,支持读写 CSV/Excel/SQL、数据清洗、分组聚合、时间序列。Pandas 3.0(2026.01)默认启用 PyArrow 字符串类型。

核心知识点

概念白话解释
DataFrame数据表 = 二维表格(行+列,类似 Excel)
Series数据列 = 一维数组(DataFrame 的一列)
Index索引 = 每行的标签(类似行号)
GroupBy分组 = 按某列分组后聚合(如按性别统计均值)
Merge合并 = 类似 SQL 的 JOIN(按共同列连接两张表)

安装配置

pip install pandas pyarrow                           # Pandas 3.0 推荐装 pyarrow
python -c "import pandas; print(pandas.__version__)" # 验证(3.0.x)

基本使用

import pandas as pd                                   # 导入

# 读取数据
df = pd.read_csv("data.csv")                          # 读取 CSV
df = pd.read_excel("data.xlsx", sheet_name="Sheet1")  # 读取 Excel
df = pd.read_csv("data.tsv", sep="\t")               # 读取 TSV

# 查看数据
print(df.head())                                      # 前 5 行
print(df.info())                                      # 列类型和缺失值
print(df.describe())                                  # 数值统计摘要
print(df.shape)                                       # (行数, 列数)
print(df.columns.tolist())                            # 列名列表

# 选择数据
df['age']                                             # 选择一列(Series)
df[['name', 'age']]                                   # 选择多列
df.loc[0:5, 'name':'age']                             # 按标签选择
df.iloc[0:5, 0:3]                                     # 按位置选择

# 筛选行
df[df['age'] > 25]                                    # 年龄 > 25
df[(df['age'] > 25) & (df['gender'] == 'M')]          # 组合条件
df.query("age > 25 and gender == 'M'")                # query 语法

# 排序
df.sort_values('age', ascending=False)                # 按年龄降序
df.sort_values(['group', 'score'], ascending=[True, False])  # 多列排序

数据清洗

# 缺失值处理
df.isnull().sum()                                     # 每列缺失值数量
df.dropna()                                           # 删除有缺失的行
df.fillna(0)                                          # 用 0 填充
df['age'].fillna(df['age'].median(), inplace=True)    # 用中位数填充

# 去重
df.drop_duplicates()                                  # 删除重复行
df.drop_duplicates(subset=['name'])                   # 按名字去重

# 类型转换
df['age'] = df['age'].astype(int)                     # 转整数
df['date'] = pd.to_datetime(df['date'])               # 转日期

分组聚合

# GroupBy 分组
grouped = df.groupby('group')['score']                # 按组分组
print(grouped.mean())                                 # 每组均值
print(grouped.agg(['mean', 'std', 'count']))          # 多个统计量

# 数据透视表
pd.pivot_table(df, values='score',
               index='group', columns='gender',
               aggfunc='mean')                        # 交叉统计

高级用法

合并数据

# Merge(类似 SQL JOIN)
merged = pd.merge(df1, df2, on='id', how='left')     # 左连接
merged = pd.merge(df1, df2, on='id', how='inner')    # 内连接

# Concat(上下拼接)
combined = pd.concat([df1, df2], ignore_index=True)   # 纵向拼接

Apply 自定义函数

# 对每行/列应用函数
df['bmi'] = df.apply(
    lambda row: row['weight'] / (row['height'] / 100) ** 2,
    axis=1                                            # axis=1 按行
)

# 对列应用
df['name_upper'] = df['name'].apply(str.upper)        # 名字转大写

保存数据

df.to_csv("output.csv", index=False)                  # 保存 CSV
df.to_excel("output.xlsx", index=False)               # 保存 Excel
df.to_parquet("output.parquet")                       # 保存 Parquet(推荐大数据)

常见报错

报错信息原因解决方法
KeyError列名不存在df.columns 检查列名
SettingWithCopyWarning链式赋值.loc[].copy()
MemoryError数据太大chunksize 分块读取
ParserErrorCSV 格式错误检查分隔符和编码

速查表

# === 读写 ===
pd.read_csv/excel/parquet/json()   # 读取
df.to_csv/excel/parquet/json()     # 保存

# === 选择 ===
df['col']                          # 一列
df[['c1','c2']]                    # 多列
df.loc[行标签, 列标签]              # 按标签
df.iloc[行号, 列号]                 # 按位置

# === 清洗 ===
df.dropna() / df.fillna(v)        # 缺失值
df.drop_duplicates()               # 去重
df.astype(type)                    # 类型转换

# === 分析 ===
df.groupby('col').agg(func)       # 分组聚合
pd.merge(df1, df2, on='key')      # 合并
df.value_counts()                  # 频次统计

参考:Pandas 文档 | 最新版 3.0.3 (2026.05) | 更新于 2026 年