跳转到内容

Pandas

Pandas是一个开源的Python数据分析库,提供了高性能、易于使用的数据结构和数据分析工具。它特别适合处理结构化数据(如表格数据、时间序列等),是数据科学机器学习领域中最常用的工具之一。

概述[编辑 | 编辑源代码]

Pandas最初由Wes McKinney于2008年开发,名称来源于"panel data"(面板数据)和"Python data analysis"(Python数据分析)的组合。其主要特点包括:

  • 快速高效的DataFrame对象,具有默认和自定义的索引
  • 用于在内存数据结构和不同文件格式之间读写数据的工具
  • 智能的数据对齐和缺失数据处理
  • 灵活的重塑和旋转数据集
  • 基于标签的切片、花式索引和大数据集的子集化
  • 可以删除或插入数据结构中的列
  • 按数据分组进行聚合和转换
  • 高性能的数据合并和连接
  • 时间序列功能

核心数据结构[编辑 | 编辑源代码]

Pandas有两个主要数据结构:SeriesDataFrame

Series[编辑 | 编辑源代码]

Series是一维标记数组,能够保存任何数据类型(整数、字符串、浮点数、Python对象等)。轴标签统称为索引。

import pandas as pd

# 创建Series
s = pd.Series([1, 3, 5, 7, 9])
print(s)

输出:

0    1
1    3
2    5
3    7
4    9
dtype: int64

DataFrame[编辑 | 编辑源代码]

DataFrame是一个二维标记数据结构,具有可能不同类型的列。可以将其视为电子表格或SQL表,或Series对象的字典。

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

输出:

      Name  Age      City
0    Alice   25  New York
1      Bob   30     Paris
2  Charlie   35    London

主要功能[编辑 | 编辑源代码]

数据读取与写入[编辑 | 编辑源代码]

Pandas支持多种文件格式的读写操作:

# 读取CSV文件
df = pd.read_csv('data.csv')

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

# 读取Excel文件
df = pd.read_excel('data.xlsx')

# 读取JSON数据
df = pd.read_json('data.json')

数据清洗[编辑 | 编辑源代码]

Pandas提供了丰富的数据清洗功能:

# 处理缺失值
df.fillna(0)  # 用0填充缺失值
df.dropna()   # 删除包含缺失值的行

# 删除重复值
df.drop_duplicates()

# 数据类型转换
df['Age'] = df['Age'].astype('float')

数据筛选与排序[编辑 | 编辑源代码]

# 条件筛选
df[df['Age'] > 30]

# 多条件筛选
df[(df['Age'] > 25) & (df['City'] == 'Paris')]

# 排序
df.sort_values(by='Age', ascending=False)

数据聚合与分组[编辑 | 编辑源代码]

# 基本统计
df.describe()

# 分组聚合
df.groupby('City')['Age'].mean()

# 透视表
pd.pivot_table(df, values='Age', index='City', columns='Name')

时间序列处理[编辑 | 编辑源代码]

Pandas具有强大的时间序列处理能力:

# 创建时间序列
date_rng = pd.date_range(start='1/1/2020', end='1/08/2020', freq='D')

# 作为索引
ts = pd.Series(range(len(date_rng)), index=date_rng)

# 重采样
ts.resample('W').mean()

可视化[编辑 | 编辑源代码]

Pandas集成了Matplotlib,可以直接进行数据可视化:

import matplotlib.pyplot as plt

# 简单绘图
df.plot(x='Name', y='Age', kind='bar')
plt.show()

性能优化[编辑 | 编辑源代码]

对于大型数据集,可以考虑以下优化方法:

  • 使用适当的数据类型(如category类型用于分类变量)
  • 使用`eval()`和`query()`进行表达式求值
  • 使用`chunksize`参数分块读取大文件
  • 考虑使用DaskModin等扩展库处理超大数据集

实际应用案例[编辑 | 编辑源代码]

销售数据分析[编辑 | 编辑源代码]

# 读取销售数据
sales = pd.read_csv('sales_data.csv')

# 计算每月销售额
sales['Date'] = pd.to_datetime(sales['Date'])
monthly_sales = sales.groupby(sales['Date'].dt.to_period('M'))['Amount'].sum()

# 可视化
monthly_sales.plot(kind='bar', title='Monthly Sales')
plt.show()

网站用户行为分析[编辑 | 编辑源代码]

# 读取日志数据
logs = pd.read_json('user_logs.json', lines=True)

# 计算页面访问统计
page_stats = logs['page'].value_counts().head(10)

# 计算用户留存率
first_visit = logs.groupby('user_id')['timestamp'].min().reset_index()
retention = pd.merge(logs, first_visit, on='user_id', suffixes=('', '_first'))
retention['is_new'] = retention['timestamp'] == retention['timestamp_first']
daily_retention = retention.groupby(retention['timestamp'].dt.date)['is_new'].mean()

与其他工具的集成[编辑 | 编辑源代码]

Pandas可以与Python生态系统中的许多其他工具良好集成:

学习资源[编辑 | 编辑源代码]

  • 官方文档: pandas.pydata.org
  • 《Python for Data Analysis》 by Wes McKinney
  • Pandas Cookbook by Theodore Petrou
  • 10 Minutes to Pandas (官方快速入门教程)

参见[编辑 | 编辑源代码]