当前位置:首页>python>Excel看花眼?Python一键出图

Excel看花眼?Python一键出图

  • 2026-09-12 13:13:53
Excel看花眼?Python一键出图

- 摘要:每月账单一堆数字,根本看不出钱花哪了?用 Python 的 pandas 和 matplotlib,不到 10 行就能把 CSV 变成一眼看懂的柱状图和饼图。附完整可运行代码和中文乱码等常见坑的解决办法,零基础也能照着跑。

---

你是不是也这样看账单

每到月底,打开支付宝或微信的账单导出,密密麻麻几百行。餐饮、交通、购物、娱乐……数字一大片,眼睛都看花了,还是不知道钱到底溜去哪了。

有人会把这些数据粘进 Excel,再手动插入图表。可光是选中区域、调格式、改颜色,就够折腾半天,最后还不一定好看。

其实这事用 Python 干最合适。你只需要把账单存成一个 CSV 文件,写几行代码,它就能帮你算出每个品类花了多少,再自动画出柱状图和饼图。喝口水的功夫,账单一目了然。

你可能会想:「我没学过编程,这能行吗?」放心,这篇文章里的代码是完整的,直接复制就能跑,不需要你理解每一行的意思。跑通之后,你再慢慢琢磨也不迟。

先搞懂三件事

数据分析听起来吓人,拆开就三步:

- 读数据:把 CSV 文件读进来,变成 Python 能处理的结构。

- 算总数:按品类把金额加起来,看看谁最烧钱。

- 画图:把算出来的数字变成图表,肉眼直接看。

负责读数据和算总数的库叫 pandas,画图的是 matplotlib。这俩是 Python 数据圈最标配的组合,学会了能应付大部分日常分析。

装它们只要一行命令。打开终端(Windows 叫命令提示符,Mac 叫终端),输入:

pip install pandas matplotlib

等它跑完,环境就齐了。要是提示 pip 找不到,多半是 Python 没装好,先去 Python 官网下个安装包,记得勾上「Add to PATH」。

准备一份账单数据

为了让你马上能跑,我写了段代码,自动生成一份示例账单。你不用自己准备任何文件,复制就能用。

等跑通了,你只要把 账单.csv 换成自己导出的真实账单(列名改成「日期、品类、金额」就行),后面的分析一行都不用改。

import csv

# 一份示例账单:日期 / 品类 / 金额

sample = [

    ["日期", "品类", "金额"],

    ["2026-08-01", "餐饮", 38],

    ["2026-08-02", "交通", 12],

    ["2026-08-03", "餐饮", 56],

    ["2026-08-05", "购物", 199],

    ["2026-08-07", "餐饮", 45],

    ["2026-08-09", "交通", 18],

    ["2026-08-12", "娱乐", 88],

    ["2026-08-15", "餐饮", 62],

    ["2026-08-18", "购物", 320],

    ["2026-08-20", "交通", 15],

    ["2026-08-22", "娱乐", 45],

]

with open("账单.csv", "w", newline="", encoding="utf-8") as f:

    csv.writer(f).writerows(sample)

print("示例账单已生成:账单.csv")

运行后,你的文件夹里就会多出一个 账单.csv。打开看看,就是一张规规矩矩的表格。

读进来,算一算

下面这段代码把 CSV 读进来,顺便告诉你这个月一共花了多少。

import pandas as pd

df = pd.read_csv("账单.csv")

print(df)

print("这个月一共花了:", df["金额"].sum(), "元")

pd.read_csv 是 pandas 的读表函数,读进来的是一个叫 DataFrame 的表格对象。后面那个 df["金额"].sum(),意思就是「把『金额』这一列全部加起来」。

接着,按品类汇总:

cat = df.groupby("品类")["金额"].sum().sort_values(ascending=False)

print(cat)

groupby("品类") 是按品类分组,["金额"].sum() 是把每组的金额加总,sort_values(ascending=False) 是从多到少排个序。跑出来你会看到类似这样的结果:

品类

购物    519

餐饮    201

娱乐    133

交通     45

这下清楚了:这个月最爱花钱的居然是「购物」。

画图才是重头戏

数字还是有点干,画成图才带感。先来一张柱状图:

import matplotlib.pyplot as plt

# 解决中文显示成方块的问题(下一节细说)

plt.rcParams["font.sans-serif"] = ["SimHei", "Microsoft YaHei", "PingFang SC"]

plt.rcParams["axes.unicode_minus"] = False

plt.figure(figsize=(7, 4))

plt.bar(cat.index, cat.values, color="#07c160")

plt.title("本月各品类支出")

plt.xlabel("品类")

plt.ylabel("金额(元)")

plt.tight_layout()

plt.savefig("支出柱状图.png", dpi=120)

plt.show()

plt.bar 就是画柱状图,color="#07c160" 是微信绿,看着舒服。plt.savefig 会把图存成图片文件,plt.show() 则直接弹窗给你看。

再来一张饼图,看看每个品类占总支出的比例:

plt.figure(figsize=(6, 6))

plt.pie(cat.values, labels=cat.index, autopct="%.1f%%",

        colors=["#07c160", "#56ccf2", "#f2994a", "#eb5757"])

plt.title("支出占比")

plt.savefig("支出饼图.png", dpi=120)

plt.show()

autopct="%.1f%%" 会在每块饼上标出百分比。跑完,两张图就躺在你的文件夹里了。是不是比对着数字发呆爽多了?

常见问题,先帮你踩坑

图里的中文变成方块了?

这是 matplotlib 找不到中文字体。上面那两行 rcParams 已经按常见字体名排了优先级,大多数电脑能直接解决。要是还不行,Windows 把 SimHei 换成 Microsoft YaHei,Mac 换成 PingFang SC 试试。

图片一闪而过,没保存?

弹窗关掉后图就没了,但 plt.savefig 已经帮你存成 PNG 了,去文件夹里找 支出柱状图.png 和 支出饼图.png 就行。

自己的 CSV 读不进来?

多半是编码问题。微信或支付宝导出的文件有时是 gbk 编码,这时把读表那行改成 pd.read_csv("账单.csv", encoding="gbk")。

我根本没有账单数据?

先用文章里的示例账单跑通流程,有感觉了再去导自己的。别卡在「没数据」这一步,动手比完美重要。

品类那一列叫别的名字?

比如叫「类型」。那所有用到 "品类" 的地方,改成你的列名 "类型" 即可,逻辑一模一样。

把上面的拼成一份完整脚本

贴心的我把前面所有步骤合成了一个文件。你新建一个 analysis.py,把下面这些一次性粘进去,运行就能出全部结果和图表:

import csv

import pandas as pd

import matplotlib.pyplot as plt

# ---- 第 1 步:准备数据(自动生成示例;你换成自己的 CSV 即可)----

sample = [

    ["日期", "品类", "金额"],

    ["2026-08-01", "餐饮", 38],

    ["2026-08-02", "交通", 12],

    ["2026-08-03", "餐饮", 56],

    ["2026-08-05", "购物", 199],

    ["2026-08-07", "餐饮", 45],

    ["2026-08-09", "交通", 18],

    ["2026-08-12", "娱乐", 88],

    ["2026-08-15", "餐饮", 62],

    ["2026-08-18", "购物", 320],

    ["2026-08-20", "交通", 15],

    ["2026-08-22", "娱乐", 45],

]

with open("账单.csv", "w", newline="", encoding="utf-8") as f:

    csv.writer(f).writerows(sample)

print("示例账单已生成:账单.csv")

# ---- 第 2 步:读数据 ----

df = pd.read_csv("账单.csv")

print(df)

print("这个月一共花了:", df["金额"].sum(), "元")

# ---- 第 3 步:按品类汇总 ----

cat = df.groupby("品类")["金额"].sum().sort_values(ascending=False)

print(cat)

# ---- 第 4 步:画图(解决中文乱码)----

plt.rcParams["font.sans-serif"] = ["SimHei", "Microsoft YaHei", "PingFang SC"]

plt.rcParams["axes.unicode_minus"] = False

plt.figure(figsize=(7, 4))

plt.bar(cat.index, cat.values, color="#07c160")

plt.title("本月各品类支出")

plt.xlabel("品类")

plt.ylabel("金额(元)")

plt.tight_layout()

plt.savefig("支出柱状图.png", dpi=120)

plt.show()

plt.figure(figsize=(6, 6))

plt.pie(cat.values, labels=cat.index, autopct="%.1f%%",

        colors=["#07c160", "#56ccf2", "#f2994a", "#eb5777"])

plt.title("支出占比")

plt.savefig("支出饼图.png", dpi=120)

plt.show()

print("图表已保存:支出柱状图.png / 支出饼图.png")

写在最后

你看,数据分析没那么玄乎。读表、汇总、画图,三步就完事。今天你拿示例账单跑通了,明天就能把上个月的真实账单导出来,看看钱到底溜去了哪个无底洞。

我自己的体会是:第一次画出那张饼图时,才发现「娱乐」花得比想象中多得多。这种「看见自己」的感觉,正是学编程最有意思的地方。

你打算拿什么数据练手?账单、运动记录、还是读书清单?欢迎在评论区聊聊,下次我教你用 Python 做更复杂的可视化。

最新文章

随机文章