4、Python基础回顾:Python环境配置、常用库介绍(pandas, openpyxl, sqlalchemy)
各位同学好,我是老张。做监管报表自动化这些年,我踩过最多的坑,其实不是业务逻辑多复杂,而是环境没配好、库没装对。今天咱们就把Python基础环境捋一遍,重点说说三个核心库——pandas、openpyxl、sqlalchemy。这些东西,说白了就是你做报表自动化的“三把刀”。
4.1 Python环境配置:别让环境卡住你
我个人习惯用Anaconda来管理Python环境。为什么?因为做报表自动化,你免不了要装各种依赖包,Anaconda的conda命令能帮你省去很多版本冲突的麻烦。
配置步骤其实很简单,就三步:
- 下载安装Anaconda —— 去官网选对应系统版本,一路默认安装就行
- 创建虚拟环境 —— 用命令
conda create -n report_env python=3.9 - 激活环境 ——
conda activate report_env
嗯,这里要注意:很多新手装完Anaconda就直接用base环境,结果项目一多,包全混在一起,最后搞到崩溃。我曾经有个同事,就是因为环境混乱,导致pandas和openpyxl版本不兼容,报表生成时单元格格式全乱了,加班到凌晨两点才搞定。所以,每个项目单独建一个环境,这是血的教训。
4.2 pandas:报表处理的核心引擎
pandas,说白了就是Python里的Excel。但比Excel强的是,它能处理百万行数据不卡顿。我做监管报表时,90%的数据清洗和转换工作都靠它。
先看个最常用的例子——读取Excel文件:
import pandas as pd
# 读取监管报表模板
df = pd.read_excel('监管报表模板.xlsx', sheet_name='资产负债表')
print(df.head()) # 看看前5行数据长啥样
你想想看,如果不用pandas,你得用openpyxl一行一行读,再自己拼成DataFrame,多累啊。pandas直接帮你把Excel表格变成二维数据结构,操作起来特别顺手。
我在项目中遇到过最典型的场景:从数据库里拉出上百万条交易记录,需要按机构、按产品类型汇总。用pandas的groupby,一行代码搞定:
# 按机构汇总贷款余额
summary = df.groupby('机构名称')['贷款余额'].sum().reset_index()
print(summary)
df.head()/df.tail()—— 预览数据df.info()—— 查看数据类型和缺失值df.describe()—— 数值列的统计摘要df.isnull().sum()—— 检查空值df.dropna()/df.fillna()—— 处理缺失值
4.3 openpyxl:精细控制Excel格式
pandas擅长处理数据,但监管报表对格式要求特别严——字体、边框、背景色、合并单元格,一个都不能少。这时候就得请出openpyxl了。
openpyxl能让你像操作Excel界面一样,用代码控制每一个单元格的样式。举个例子,给报表标题加个蓝色背景:
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Border, Side
wb = Workbook()
ws = wb.active
# 设置标题样式
title_fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')
title_font = Font(name='微软雅黑', size=14, bold=True, color='FFFFFF')
ws['A1'] = '监管报表——资产负债表'
ws['A1'].fill = title_fill
ws['A1'].font = title_font
wb.save('格式化报表.xlsx')
我曾经犯过一个错:用pandas直接to_excel生成报表,结果监管老师反馈说“字体不对、边框没有”。后来我学乖了,先用pandas处理数据,再用openpyxl做格式美化。说白了,pandas负责“里子”,openpyxl负责“面子”。
4.4 sqlalchemy:连接数据库的桥梁
监管报表的数据源,通常不在Excel里,而在数据库里。sqlalchemy就是帮你从数据库取数据的工具。它支持MySQL、Oracle、SQL Server等各种数据库,而且写法统一。
看个连接MySQL的例子:
from sqlalchemy import create_engine
import pandas as pd
# 连接数据库
engine = create_engine('mysql+pymysql://用户名:密码@localhost:3306/监管数据库')
# 用SQL查询数据
sql = "SELECT * FROM 贷款明细表 WHERE 报告日期 = '2024-12-31'"
df = pd.read_sql(sql, engine)
print(f"共查询到 {len(df)} 条记录")
你想想看,如果没有sqlalchemy,你得手动装数据库驱动、写连接代码、处理游标……麻烦得很。sqlalchemy把这些全封装好了,你只需要写SQL就行。
我个人习惯把数据库连接信息放在配置文件里,而不是硬编码在代码中。这样换环境时改个配置文件就行,不用改代码。比如:
# config.ini
[database]
host = localhost
port = 3306
user = report_user
password = your_password
dbname = 监管数据库
4.5 三库协同:一个完整的报表生成流程
光说单个库没意思,咱们看看它们怎么配合。下面这张图是我做报表自动化的标准流程:
看明白了吧?这三个库各司其职,配合起来就是一套完整的自动化流水线。我在实际项目中,通常写一个Python脚本,里面依次调用这三个库,一键生成所有监管报表。
4.6 环境验证:确保一切就绪
最后,咱们写个简单的验证脚本,确保环境没问题:
# check_env.py
import sys
print(f"Python版本: {sys.version}")
try:
import pandas as pd
print(f"pandas版本: {pd.__version__}")
except ImportError:
print("pandas未安装,请运行: pip install pandas")
try:
import openpyxl
print(f"openpyxl版本: {openpyxl.__version__}")
except ImportError:
print("openpyxl未安装,请运行: pip install openpyxl")
try:
from sqlalchemy import create_engine
print(f"sqlalchemy版本: {sqlalchemy.__version__}")
except ImportError:
print("sqlalchemy未安装,请运行: pip install sqlalchemy")
运行这个脚本,如果三个库都显示版本号,恭喜你,环境配好了。如果报错,别慌,用pip install补上就行。
好了,Python基础环境就说到这儿。这三个库是监管报表自动化的基石,你花点时间把它们玩熟,后面写代码会顺手很多。记住,工具是死的,思路是活的。多动手试试,遇到问题别怕,我当年也是一行一行代码调试过来的。
公众号:蓝海资料掘金营,微信deep3321