第二天学习内容:读取 Excel 并进行账龄分析

一、今天的学习目标

昨天,我们学了字符串的基本操作(拼接、切片、拆分等)。今天,我们把这些基本操作应用到真实场景中——从 Excel 中读取数据并进行简单分析。今天学习如何使用 Python 读取 Excel 文件,并对其中的账龄数据进行简单处理。
目标是:

  1. 学会使用 openpyxl 这个库读取 Excel

  2. 理解如何逐行提取 Excel 数据

  3. 用最基础的条件判断(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 个元素,分别代表:

  1. 客户名('张三'

  2. 欠款天数(45

  3. 欠款金额(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:输出最终的账龄分析结果。


六、今天的小总结

今天我们学到了:

  1. 如何使用 openpyxl 库读取 Excel 文件

  2. 如何逐行读取 Excel 中的数据

  3. 最基础的账龄分析:用 if 判断欠款天数

  4. 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 可以帮你提示语法,但理解逻辑才是记住的关键

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐