DAY2 从不会改代码到独立做账龄分析:14 天 AI + Python 实战记录
本文介绍了使用Python的openpyxl库进行Excel数据读取和账龄分析的方法。主要内容包括:安装和导入openpyxl库、打开Excel文件、选择工作表、逐行读取数据,以及通过条件判断实现基础账龄分析。通过创建字典存储账龄区间,利用for循环和if-elif-else语句对欠款天数进行分类统计,最终输出各区间欠款总金额。该教程为财务数据分析提供了基础操作框架,帮助初学者掌握Excel数据读
第二天学习内容:读取 Excel 并进行账龄分析
一、今天的学习目标
昨天,我们学了字符串的基本操作(拼接、切片、拆分等)。今天,我们把这些基本操作应用到真实场景中——从 Excel 中读取数据并进行简单分析。今天学习如何使用 Python 读取 Excel 文件,并对其中的账龄数据进行简单处理。
目标是:
-
学会使用
openpyxl这个库读取 Excel -
理解如何逐行提取 Excel 数据
-
用最基础的条件判断(
if)进行账龄分析
这些知识将为后续的财务分析打下基础。
二、Excel 文件如何在 Python 里读取?
在财务分析中,数据大部分都来自 Excel,Python 怎么读取 Excel 呢?
首先,我们需要安装并导入 openpyxl 库,它是专门用来操作 Excel 文件的。
1. 安装 openpyxl 库
打开你的 PyCharm,找到右下角的 Terminal(终端),然后输入以下命令来安装 openpyxl:
pip install openpyxl
安装完成后,Python 就可以使用这个库了。
2. 导入 openpyxl 库
from openpyxl import load_workbook
-
from openpyxl:告诉 Python 你要使用openpyxl库 -
import load_workbook:导入读取 Excel 文件的函数,load_workbook就是用来打开和读取 Excel 文件的工具。
三、用 Python 打开并读取 Excel 文件
假设你有一个 Excel 文件 欠款数据.xlsx,文件里存放了客户欠款的数据。我们来看看怎么打开它并读取里面的内容。
1. 打开 Excel 文件
wb = load_workbook("欠款数据.xlsx")
-
wb就是打开的 Excel 文件 -
load_workbook("欠款数据.xlsx")是打开文件的函数,"欠款数据.xlsx"是文件名
如果你没有放在 Python 文件同级目录下,记得写文件的完整路径。
小贴士:关于 Python 文件同级目录
-
什么是同级目录?
如果你的 Python 脚本和 Excel 文件在同一个文件夹里,那就叫同级目录。你只需要写文件名,Python 就能找到它。 -
文件不在同级目录时:完整路径——完整路径是什么? 如果文件在其他文件夹里,你需要写出完整路径,告诉 Python 文件在哪里。例如:
-
wb = load_workbook("C:/Users/你的用户名/Documents/我的项目/数据.xlsx")怎么找到完整路径?
打开文件所在的文件夹,右键点击文件,选择“属性”。
-
你可以看到文件的完整路径,把它复制到 Python 代码中。
2. 选择 Excel 工作表
Excel 文件中可能有多个工作表,我们需要选择其中一个。默认是选择第一个工作表:
sheet = wb.active
-
sheet是你选中的工作表,后面所有的操作都会针对这个工作表进行
四、读取工作表中的数据
我们读取的是 Excel 工作表中的内容,每一行数据都包含不同的财务信息(例如客户名、欠款天数、金额等)。
你可以通过下面的代码逐行读取工作表的数据。
1. 逐行读取 Excel 数据
假设你的 Excel 文件长得像这样:
| 客户 | 欠款天数 | 金额 |
|---|---|---|
| 张三 | 45 | 1000 |
| 李四 | 20 | 500 |
| 王五 | 75 | 2000 |
代码如下:
for row in sheet.iter_rows(min_row=2, values_only=True):
print(row)
解释:
-
sheet.iter_rows(min_row=2, values_only=True):逐行读取从第 2 行开始的数据(min_row=2是为了跳过表头) -
row是每一行的数据,打印出来看它是什么格式 -
values_only=True让每一行只返回单元格的值,而不是更多的信息
输出结果:
('张三', 45, 1000)
('李四', 20, 500)
('王五', 75, 2000)
你看到的这些数据已经是 Python 里的元组(tuple)了,每个元组里有 3 个元素,分别代表:
-
客户名(
'张三') -
欠款天数(
45) -
欠款金额(
1000)
五、基础账龄分析:判断欠款是否逾期
我们已经能够从 Excel 中读取数据了,现在来做一个最简单的账龄分析。目标是:根据“欠款天数”来判断是否逾期,并计算各个区间的总金额。
假设逾期的账龄区间如下:
-
0–30 天:正常
-
31–60 天:轻微逾期
-
61–90 天:中度逾期
-
大于 90 天:严重逾期
1. 代码实现账龄分析
age_buckets = {
"0-30": 0,
"31-60": 0,
"61-90": 0,
">90": 0
}
for row in sheet.iter_rows(min_row=2, values_only=True):
name, days, amount = row
if days <= 30:
age_buckets["0-30"] += amount
elif days <= 60:
age_buckets["31-60"] += amount
elif days <= 90:
age_buckets["61-90"] += amount
else:
age_buckets[">90"] += amount
print(age_buckets)
解释:
-
age_buckets是一个字典,用来存储各个账龄区间的总金额 -
for row in sheet.iter_rows(min_row=2, values_only=True)逐行读取数据 -
if-elif-else用来判断欠款天数属于哪个区间,然后把金额累加到对应的区间
输出结果(假设数据如下):
{'0-30': 500, '31-60': 1000, '61-90': 2000, '>90': 0}
表示:
-
0–30 天:500 元
-
31–60 天:1000 元
-
61–90 天:2000 元
-
大于 90 天:0 元
-
讲解:
-
age_buckets = {
"0-30": 0,
"31-60": 0,
"61-90": 0,
">90": 0
}
解释:这行代码创建了一个字典(dictionary)。字典是 Python 中的一种数据结构,用来存储键(key)和对应的值(value)。
age_buckets 是字典的名字,意思是“账龄区间”。
这个字典有 4 个键,每个键表示一个账龄区间(0-30 天、31-60 天、61-90 天、超过 90 天),值初始都设为 0。表示每个区间的欠款总金额(暂时为 0,后面会累加)。
-
for row in sheet.iter_rows(min_row=2, values_only=True):
name, days, amount = row
解释:for 是 Python 中的循环语句,表示“遍历”。
sheet.iter_rows(min_row=2, values_only=True) 是用来逐行读取 Excel 工作表的数据:
min_row=2 表示从 Excel 表格的第 2 行开始读取(通常第 1 行是表头,不需要处理)。
values_only=True 表示只读取单元格里的数据值,而不是其他格式或样式。
这行代码会依次把每一行的值存入 row 变量,row 是一个包含 3 个元素的元组:
name:客户的名字(例如“张三”)
days:欠款的天数(例如 45 天)
amount:欠款金额(例如 1000 元)
英文解释:
iter_rows:表示“遍历行”。
min_row:表示“从第几行开始”。
values_only:表示“只取值,不取其他信息”。
-
if days <= 30:
age_buckets["0-30"] += amount
elif days <= 60:
age_buckets["31-60"] += amount
elif days <= 90:
age_buckets["61-90"] += amount
else:
age_buckets[">90"] += amount
解释:这部分是一个条件判断(if-elif-else)语句,用来根据欠款天数(days)判断它属于哪个账龄区间,并把欠款金额(amount)加到对应的区间。
if days <= 30:
如果 days 小于或等于 30(即欠款天数在 0-30 天之间),则把 amount(欠款金额)加到字典中 "0-30" 键对应的值里。
elif days <= 60:
如果 days 在 31 到 60 天之间,就把欠款金额加到 "31-60" 区间。
elif days <= 90:
如果 days 在 61 到 90 天之间,就加到 "61-90" 区间。
else:
如果 days 大于 90 天,就加到 ">90" 区间。
英文解释:
if:表示“如果”。
elif:是“else if”的缩写,表示“否则,如果”。
else:表示“否则”。
<=:表示“小于或等于”。
+=:表示“累加”,即把右边的值加到左边的值上。
-
print(age_buckets)
解释:print(age_buckets) 将输出字典 age_buckets 的内容。
你会看到各个账龄区间对应的总欠款金额。
例如,输出可能是:
{'0-30': 1500, '31-60': 2000, '61-90': 2500, '>90': 1000}
这表示:欠款天数在 0-30 天之间的总金额是 1500 元
欠款天数在 31-60 天之间的总金额是 2000 元
欠款天数在 61-90 天之间的总金额是 2500 元
欠款天数超过 90 天的总金额是 1000 元
小结:
age_buckets 字典:存储各个账龄区间的欠款总金额。for 循环:逐行读取 Excel 中的欠款数据。
if-elif-else 判断:根据欠款天数判断它属于哪个账龄区间,并累加相应金额。
print:输出最终的账龄分析结果。
六、今天的小总结
今天我们学到了:
-
如何使用
openpyxl库读取 Excel 文件 -
如何逐行读取 Excel 中的数据
-
最基础的账龄分析:用 if 判断欠款天数
-
Python 中的数据结构:列表、字典、元组
你现在已经能够从 Excel 中提取数据并进行简单分析了,后续会继续提升,让分析更高效、更智能。
那么今天可能有小朋友要问了,我学习了这么多代码我记不住怎么办?
完全正常,刚开始学 Python + 财务分析的时候,大脑会有点“信息爆炸”,尤其是代码语法和逻辑都还不熟悉。记不住并不代表你学不会。关键是理解 > 死记硬背,然后用对方法巩固记忆。
这里给你几个小白也能用的办法:
1️⃣ 多写几次,动手比看记得快
-
读代码容易忘,自己敲一遍比看 AI 给的例子强十倍。
-
先照着博客代码敲一遍,输出结果看对不对。
-
再改一点,比如把 Excel 文件换成你自己的数据,改账龄区间、金额,看看输出变化。
小技巧:不要追求一次记住,做多几次你自然会记住结构和方法。
2️⃣ 写中文注释,帮自己理解
-
在每行代码旁边写中文注释,把逻辑和英文都解释清楚。
-
例如:
age_buckets = {"0-30":0, "31-60":0, "61-90":0, ">90":0} # 建立字典存储每个账龄区间金额
for row in sheet.iter_rows(min_row=2, values_only=True): # 遍历 Excel 从第2行开始的数据
name, days, amount = row # 拆分每行的数据:名字、欠款天数、金额
if days <= 30: # 小于等于30天,属于0-30天区间
age_buckets["0-30"] += amount
elif days <= 60: # 31-60天
age_buckets["31-60"] += amount
elif days <= 90: # 61-90天
age_buckets["61-90"] += amount
else: # 超过90天
age_buckets[">90"] += amount
print(age_buckets) # 输出账龄分析结果
中文注释能帮你把“英文 + 符号 + 逻辑”转化成大脑能理解的意思。
3️⃣ 小步练习,不要求一次全部记住
-
今天只记住字典 + 循环 + if-elif-else 的结构
-
明天练习用 pandas 做类似账龄分析时,自然会再次用到,你会慢慢记住
-
重复比死记硬背有效 10 倍
4️⃣ 结合博客写自己的小笔记
-
每天学习完,把今天的代码用自己的话总结一遍,或者画一个小流程图:
-
Excel → 遍历每行 → 判断区间 → 累加金额 → 输出
-
-
视觉化信息比文字记忆容易。
5️⃣ 别怕忘
-
刚开始忘是正常的,不代表你学不会
-
多动手、多尝试、多改参数,你会慢慢形成自己的“肌肉记忆”
-
AI 可以帮你提示语法,但理解逻辑才是记住的关键
更多推荐


所有评论(0)