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
openpyxl 和 xlrd 是读写Excel用的。我在项目中遇到过,光装pandas不够,读写.xlsx文件还得靠这两个小兄弟。
小技巧: 如果你在公司内网,没法连外网pip,可以提前在能联网的电脑上把包下载成.whl文件,拷进去离线安装。我曾经在客户现场折腾了一下午,就为了搞定这个。
3.2 Pandas库快速入门——监管数据的瑞士军刀
Pandas说白了就是Python里的Excel。但它比Excel强在哪?处理几十万行数据不卡,而且能自动化。
咱们先看最核心的两个数据结构:Series 和 DataFrame。
- 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 知识体系总览
下面这张图,是我自己总结的本章知识脉络。你看一眼,心里就有数了。
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的基本功练扎实了,后面咱们就能直接上手做监管报送的自动化脚本了。