3、Python基础回顾:Python环境配置、Pandas库快速入门、NumPy基础操作

说实话,很多做监管报送的朋友,一开始都被Excel折磨得够呛。几十万条数据,打开卡半天,公式一拖就崩。我当年也是这么过来的。后来我下定决心,用Python把这套流程自动化了。今天这一讲,咱们就把Python环境、Pandas和NumPy这三个基本功打扎实。

3.1 Python环境配置——别让环境卡住你

我个人习惯用Anaconda来管理Python环境。为什么?因为它自带了一堆数据科学库,省得你一个个pip install。你想想看,要是每次换台电脑都得重新装一遍库,多烦人。

推荐配置:

  • Python 3.8+(3.9、3.10都行,别用2.7了,那玩意儿早退休了)
  • Anaconda 或 Miniconda
  • IDE:VS Code 或 PyCharm(我偏好VS Code,轻量)

安装完Anaconda后,打开终端(Windows用户用Anaconda Prompt),敲下面这行命令,创建一个干净的虚拟环境:

conda create -n report_auto python=3.9
conda activate report_auto

嗯,这里要注意:虚拟环境的名字别起得太随意。我见过有人起名叫“test123”,三个月后自己都忘了这是干嘛用的。建议用项目名,比如 report_auto 就挺好。

接下来安装核心库:

pip install pandas numpy openpyxl xlrd

openpyxlxlrd 是读写Excel用的。我在项目中遇到过,光装pandas不够,读写.xlsx文件还得靠这两个小兄弟。

小技巧: 如果你在公司内网,没法连外网pip,可以提前在能联网的电脑上把包下载成.whl文件,拷进去离线安装。我曾经在客户现场折腾了一下午,就为了搞定这个。

3.2 Pandas库快速入门——监管数据的瑞士军刀

Pandas说白了就是Python里的Excel。但它比Excel强在哪?处理几十万行数据不卡,而且能自动化。

咱们先看最核心的两个数据结构:SeriesDataFrame

  • Series:一维数组,带标签。相当于Excel里的一列。
  • DataFrame:二维表格,带行索引和列名。相当于一整张Sheet。

来个例子,模拟监管报送里常见的“机构信息表”:

import pandas as pd

# 创建一个DataFrame
data = {
    '机构代码': ['A001', 'A002', 'A003'],
    '机构名称': ['北京分行', '上海分行', '深圳分行'],
    '资产规模(亿)': [1200, 980, 750],
    '不良率(%)': [1.2, 0.8, 1.5]
}
df = pd.DataFrame(data)
print(df)

输出长这样:

  机构代码  机构名称  资产规模(亿)  不良率(%)
0    A001  北京分行     1200      1.2
1    A002  上海分行      980      0.8
2    A003  深圳分行      750      1.5

你看,是不是跟Excel表格一模一样?但接下来才是Pandas的厉害之处。

3.2.1 数据筛选——监管报送的日常操作

监管报送里,经常要筛选“不良率超过1%的机构”。用Pandas一行搞定:

# 筛选不良率 > 1% 的机构
high_risk = df[df['不良率(%)'] > 1]
print(high_risk)

输出:

  机构代码  机构名称  资产规模(亿)  不良率(%)
0    A001  北京分行     1200      1.2
2    A003  深圳分行      750      1.5

我曾经在做一个季报自动化脚本时,需要从3000多家机构里筛出“资产规模超500亿且不良率低于1%”的名单。用Excel筛选?得等半天。用Pandas,0.3秒出结果。

3.2.2 数据分组与聚合——汇总统计的核心

监管报表里,经常要按地区、按机构类型做汇总。比如计算各地区的平均不良率:

# 假设我们加一列'地区'
df['地区'] = ['华北', '华东', '华南']
grouped = df.groupby('地区')['不良率(%)'].mean()
print(grouped)

输出:

地区
华北    1.2
华东    0.8
华南    1.5
Name: 不良率(%), dtype: float64

注意: groupby之后返回的是一个GroupBy对象,不是DataFrame。你得在后面接聚合函数(mean、sum、count等)才能拿到结果。我刚开始学的时候,经常忘了这一步,打印出来一堆看不懂的东西。

3.2.3 读写Excel——与监管系统对接

监管报送的最终产出,往往是一个Excel文件。Pandas读写Excel非常方便:

# 读取Excel
df_input = pd.read_excel('监管原始数据.xlsx', sheet_name='Sheet1')

# 处理数据...

# 写入Excel
df_output.to_excel('报送结果.xlsx', index=False)

index=False 这个参数很重要。如果不加,Pandas会把行索引也写进Excel,监管老师看到多出来一列“Unnamed: 0”,会一脸懵。我吃过这个亏。

3.3 NumPy基础操作——Pandas背后的引擎

NumPy是Pandas的底层计算库。说白了,Pandas里的很多操作,最终都是调用NumPy来算的。你不需要精通NumPy,但掌握几个基础操作,能让你写代码更高效。

3.3.1 数组创建

import numpy as np

# 创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])

# 创建全零数组(常用于初始化)
zeros = np.zeros((3, 4))  # 3行4列

# 创建等差数列(监管报送里常用,比如生成时间序列)
dates = np.arange(202001, 202013)  # 生成202001到202012
print(dates)

3.3.2 向量化运算——告别for循环

这是NumPy最爽的地方。比如你要计算所有机构资产规模的平方:

# 用NumPy向量化运算
assets = np.array([1200, 980, 750])
squared = assets ** 2
print(squared)  # 输出 [1440000  960400  562500]

如果用Python原生for循环,得写好几行,而且慢。NumPy底层用C语言实现,速度是Python原生循环的几十倍。

核心原则: 能用NumPy向量化运算,就别写for循环。这是提升性能的关键。

3.3.3 统计函数——监管指标计算利器

监管报送里经常要算均值、标准差、最大值、最小值。NumPy都封装好了:

data = np.array([1.2, 0.8, 1.5, 0.9, 1.1])
print('均值:', np.mean(data))
print('标准差:', np.std(data))
print('最大值:', np.max(data))
print('最小值:', np.min(data))

输出:

均值: 1.1
标准差: 0.258...
最大值: 1.5
最小值: 0.8

3.4 知识体系总览

下面这张图,是我自己总结的本章知识脉络。你看一眼,心里就有数了。

Python基础回顾 环境配置 • Anaconda 安装 • 虚拟环境创建 • 核心库安装 Pandas 快速入门 • Series / DataFrame • 数据筛选与过滤 • groupby 分组聚合 • Excel 读写 NumPy 基础操作 • 数组创建 • 向量化运算 • 统计函数 核心目标:用Python替代Excel,实现监管报送自动化 环境是基础,Pandas是主力,NumPy是加速器

3.5 避坑指南

最后,分享几个我踩过的坑,你遇到了能少走弯路:

  • 路径问题: 读取文件时,尽量用绝对路径,或者用 os.path.join() 拼接路径。我曾经用相对路径,结果脚本换个目录就报错,排查了半天。
  • 编码问题: 读取Excel或CSV时,如果遇到乱码,试试加参数 encoding='utf-8'encoding='gbk'。监管系统导出的文件,编码经常不统一。
  • 数据类型: Pandas读取Excel后,数字列有时会被识别成字符串。用 df['列名'] = pd.to_numeric(df['列名'], errors='coerce') 强制转换一下。

我的习惯: 每次处理数据前,先调 df.info() 看一眼各列的数据类型和缺失值。花10秒钟看一眼,能省后面1小时的调试时间。

好了,这一讲的内容就到这儿。环境搭好了,Pandas和NumPy的基本功练扎实了,后面咱们就能直接上手做监管报送的自动化脚本了。

专注资料整理