Skip to content

Pandas 用法总结

简介

Pandas 是 Python 中一个强大的数据分析库,它基于 NumPy 构建,提供了高效、灵活且易于使用的数据结构和数据分析工具,特别适用于处理结构化数据(如表格、CSV 文件、Excel 表格等)。其名称来源于 "Panel Data"(面板数据)和 "Python Data Analysis"(Python 数据分析)。

安装与导入

bash
pip install pandas

通常在代码中这样导入:

python
import pandas as pd

核心数据结构

Pandas 的核心是两种主要的数据结构:

1. Series

  • 定义:一个一维的、带有标签的数组,可以存储任何数据类型(整数、字符串、浮点数、Python 对象等)。
  • 特点:类似于一个带索引的列表或一个一列的 DataFrame。
python
import pandas as pd

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s)
# 输出:
# a    10
# b    20
# c    30
# dtype: int64

2. DataFrame

  • 定义:一个二维的、大小可变的、带有标签轴(行和列)的数据结构。
  • 特点:这是 Pandas 中最常用的数据结构,类似于电子表格或 SQL 表。每一列可以是不同的数据类型。
python
import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'London', 'Paris']
}
df = pd.DataFrame(data)
print(df)
# 输出:
#      Name  Age      City
# 0   Alice   25  New York
# 1     Bob   30    London
# 2 Charlie   35     Paris

基本操作

查看数据

  • df.head(n): 查看前 n 行,默认为 5 行。
  • df.tail(n): 查看后 n 行,默认为 5 行。
  • df.info(): 显示 DataFrame 的基本信息,包括索引数据类型、列的数据类型、非空值数量等。
  • df.describe(): 生成数值列的描述性统计信息(计数、均值、标准差等)。
  • df.shape: 返回一个元组,表示 DataFrame 的维度(行数,列数)。
  • df.columns: 获取列索引。
  • df.index: 获取行索引。

数据类型

  • df.dtypes: 查看每列的数据类型。

数据选择与索引

基本选择

  • df['列名']: 选择单列,返回一个 Series。
  • df[['列名1', '列名2']]: 选择多列,返回一个新的 DataFrame。

使用 .loc.iloc

  • .loc: 主要基于标签(索引名)进行选择,支持切片,切片包含两端。
  • .iloc: 主要基于整数位置(从0开始)进行选择,支持切片,切片不包含终点。
python
# .loc 示例: 选择行标签为 'row_1' 到 'row_3',列标签为 'col_A' 到 'col_B' 的数据
df.loc['row_1':'row_3', 'col_A':'col_B']

# .iloc 示例: 选择第 0 到 2 行(不包含第 3 行),第 1 到 3 列(不包含第 4 列)的数据
df.iloc[0:3, 1:4]

数据清洗

处理缺失值

  • df.isnull() / df.isna(): 检查哪些值是缺失值 (NaN),返回布尔型 DataFrame。
  • df.notnull() / df.notna(): 检查哪些值不是缺失值,返回布尔型 DataFrame。
  • df.dropna(): 删除含有缺失值的行或列。
  • df.fillna(value): 用指定值填充缺失值。
python
# 用 0 填充所有缺失值
df_cleaned = df.fillna(0)

# 只删除那些所有列都是缺失值的行
df_dropped = df.dropna(how='all')

处理重复值

  • df.duplicated(): 检查并返回重复行的布尔 Series。
  • df.drop_duplicates(): 删除重复行。

数据类型转换

  • df.astype(dtype): 将 DataFrame 或 Series 的数据类型转换为指定类型。
python
# 将 'Age' 列转换为整数类型
df['Age'] = df['Age'].astype(int)

数据操作

添加/修改列

python
df['新列'] = df['列1'] * df['列2'] # 基于现有列计算得出
df['固定值列'] = '固定的值' # 添加一个常量列

排序

  • df.sort_values(by='列名'): 按指定列的值进行排序。
  • df.sort_index(): 按索引进行排序。
python
# 按 'Age' 列升序排序
df_sorted = df.sort_values(by='Age', ascending=True)

应用函数

  • df.apply(func): 对 DataFrame 的行或列应用一个函数。
  • series.map(dict_or_func): 对 Series 的每一个元素应用映射关系或函数。
python
# 对 'Age' 列的每个值加 1
df['Age_plus_one'] = df['Age'].apply(lambda x: x + 1)

数据聚合与分组

GroupBy

groupby 是 Pandas 中一个非常强大的功能,可以将数据集按照一个或多个键(列)进行拆分,然后对每个组应用聚合函数。

python
# 按 'City' 分组,并计算每个城市 'Age' 的平均值
grouped = df.groupby('City')['Age'].mean()
print(grouped)

# 按 'City' 分组,并对 'Age' 计算多个统计量
stats = df.groupby('City')['Age'].agg(['mean', 'max', 'min'])
print(stats)

文件读写

读取文件

  • pd.read_csv(filepath): 读取 CSV 文件。
  • pd.read_excel(filepath): 读取 Excel 文件。
  • pd.read_json(filepath): 读取 JSON 文件。
  • pd.read_sql(query, connection): 从数据库读取数据。

写入文件

  • df.to_csv(filepath, index=False): 将 DataFrame 写入 CSV 文件,index=False 表示不写入行索引。
  • df.to_excel(filepath, index=False): 将 DataFrame 写入 Excel 文件。
  • df.to_json(filepath): 将 DataFrame 写入 JSON 文件。
python
# 读取
df_from_csv = pd.read_csv('data.csv')

# 写入
df.to_csv('output.csv', index=False)

实用技巧

  • 链式操作: Pandas 支持链式调用,可以将多个操作串联起来,使代码更简洁。
    python
    result = (
        df[df['Age'] > 20]          # 筛选
        .sort_values('Age')         # 排序
        .reset_index(drop=True)     # 重置索引
    )
  • query() 方法: 提供了一种更直观的方式来筛选数据。
    python
    # 等价于 df[(df['Age'] > 20) & (df['City'] == 'New York')]
    filtered_df = df.query("Age > 20 and City == 'New York'")