第4章:Pandas入门:Series与DataFrame、数据读取(CSV/Excel)、数据预览与描述性统计、缺失值处理

做量化投资,说白了就是跟数据打交道。你想想看,股票行情、财务报表、宏观经济指标……这些数据乱七八糟地堆在一起,怎么分析?

这时候就需要Pandas出场了。我个人觉得,Pandas是Python数据分析里最核心的库,没有之一。它把数据整理得井井有条,让你能快速看到里面的规律。

4.1 两个核心数据结构:Series和DataFrame

Pandas里有两个最基本的东西:SeriesDataFrame。我刚开始学的时候,总搞不清它俩的区别。后来发现,其实很简单。

Series就是一列数据,带个标签。你可以把它想象成Excel里的一列,每个格子都有个行号。

import pandas as pd

# 创建一个Series
s = pd.Series([100, 102, 101, 105], index=['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04'])
print(s)

DataFrame就是多列数据,像个表格。它有行索引和列索引,跟Excel表格一模一样。

# 创建一个DataFrame
data = {
    '日期': ['2024-01-01', '2024-01-02', '2024-01-03'],
    '开盘价': [100, 102, 101],
    '收盘价': [102, 101, 105],
    '成交量': [10000, 12000, 11000]
}
df = pd.DataFrame(data)
print(df)
我的小习惯:我一般把DataFrame叫做"df"。写代码时少打几个字,效率高一点。但命名要清晰,别用a、b、c这种。

4.2 数据读取:从CSV和Excel开始

做量化,数据来源通常是CSV文件或Excel表格。Pandas读取这些文件,一行代码就搞定。

读取CSV文件:

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

# 如果文件编码有问题,加个参数
df = pd.read_csv('stock_data.csv', encoding='utf-8')

读取Excel文件:

# 读取Excel文件
df = pd.read_excel('stock_data.xlsx', sheet_name='Sheet1')
我曾经踩过的坑:有一次读取CSV文件,数据全是乱码。折腾了半天,才发现是编码问题。后来我习惯在读取时指定encoding='utf-8',或者用encoding='gbk'试试。Excel文件要注意sheet名称,别写错了。

4.3 数据预览与描述性统计

数据读进来了,第一件事是什么?别急着分析,先看看数据长什么样。

预览数据:

# 查看前5行
print(df.head())

# 查看后5行
print(df.tail())

# 查看数据基本信息
print(df.info())

# 查看数据的维度
print(df.shape)

head()tail()是我最常用的。看一眼数据,心里就有数了。

描述性统计:

# 描述性统计
print(df.describe())

describe()会输出均值、标准差、最小值、最大值、四分位数等。这些指标在量化分析里很常用。比如,看收盘价的均值,能大概知道股票的价格中枢在哪里。

核心指标解读:

  • count:非空值的数量。如果比总行数少,说明有缺失值。
  • mean:均值。反映数据的平均水平。
  • std:标准差。反映数据的波动程度。波动越大,风险越高。
  • min / max:最小值和最大值。看看有没有异常值。
  • 25% / 50% / 75%:四分位数。能看出数据的分布情况。

4.4 缺失值处理

现实中的数据,很少是完美的。缺失值就像路上的坑,不填平,车就开不稳。

检查缺失值:

# 检查每列有多少缺失值
print(df.isnull().sum())

处理缺失值:

处理缺失值,主要有两种方法:删除和填充。

方法一:删除缺失值

# 删除包含缺失值的行
df_clean = df.dropna()

# 删除包含缺失值的列
df_clean = df.dropna(axis=1)

方法二:填充缺失值

# 用0填充
df_filled = df.fillna(0)

# 用均值填充
df_filled = df.fillna(df.mean())

# 用前一个值填充(向前填充)
df_filled = df.fillna(method='ffill')

# 用后一个值填充(向后填充)
df_filled = df.fillna(method='bfill')
我的经验:在量化分析中,我一般优先用向前填充(ffill)。因为股票数据是时间序列,缺失值通常用上一个交易日的值来补,比较合理。用均值填充要小心,可能会引入偏差。
注意:删除缺失值会丢失数据。如果缺失值不多,可以删。但如果缺失值很多,删除会导致样本量不足,分析结果可能不靠谱。这时候填充更合适。

4.5 本章知识体系

Pandas入门知识体系 Pandas入门 数据结构 Series DataFrame 数据读取 CSV Excel 数据预览与统计 head()/tail() describe() 缺失值处理 删除 (dropna) 填充 (fillna) 检查 (isnull)

这张图把本章的核心内容串起来了。从数据结构到数据读取,再到预览统计和缺失值处理,每一步都是数据分析的必经之路。

好了,Pandas入门就讲到这里。记住,多动手写代码,数据会告诉你答案。

专注资料整理