知乎作者 CodeCrafter 的观点:

💡

核心思想:忘掉花里胡哨,80% 的时间在“搓数据”。

数据分析 80% 的工作,不是建模,不是调参,甚至不是可视化,而是枯燥、繁琐、但至关重要的数据清洗和规整。

而 Pandas,就是你在这 80% 时间里最锋利的武器。你绝大部分的 Pandas 操作,都应该服务于一个目的:把一份“脏”的、原始的、不规则的数据,变成一份“干净”的、规整的、可以随时用于分析和建模的 Tidy Data。

五个学习阶段

  • 第一阶段:拿到数据,先“望闻问切”

  • 第二阶段:定向打击,筛选与切片

  • 第三阶段:核心战场,数据清洗与转换

  • 第四阶段:分析的精髓,分组与聚合

  • 第五阶段:数据的整合,合并与连接

思维进阶:从“能用”到“好用”

  1. 向量化思维 > 循环 / Apply 思维

  2. 链式调用(Method Chaining)

✅

Pandas 的精髓,不在于记住多少函数,而在于建立一套以“数据规整”为核心,以“向量化”和“链式调用”为风格的思维模式。

我的理解

首先了解输入输出;再了解 for、where、if 三个命令;然后模仿:

  • 增加删除查找修改:行、列、多行、多列、单个单元格、多个单元格

  • 数据清洗:常用的几个动作

  • 排序:多维度排序

  • 筛选

  • 分组计算

  • 出图

Excel → pandas 速查表

按“财务日常出现频率”排序,每个功能都给:① Excel 里最直观的操作路径;② 对应的一句 pandas 代码;③ 一个会计小例子。收藏这一张,基本能覆盖 80% 的月末加班场景。

一、必备读取与保存

Excel 操作 pandas 代码 说明
文件 → 打开 → 选 .xlsx df = pd.read_excel('科目余额.xlsx', sheet_name='12月')
数据 → 从文本/CSV 导入 df = pd.read_csv('银行流水.csv', encoding='gbk')
文件 → 另存为 → .xlsx df.to_excel('调整后余额.xlsx', index=False)

二、必会行列选取

Excel 操作 pandas 代码 说明
点击列标“借方” df['借方']
多列 A、C、F df[['科目编码', '借方', '贷方']]
第 3–10 行 df[2:10]
筛选 科目=“银行存款” df[df['科目名称']=='银行存款']
筛选 借方 > 10000 df[df['借方'] > 10000] 大额凭证清单
借贷差额>0 且 币种=USD df.query("abs(借方-贷方)>0 and 币种=='USD'")

三、常用文本/日期/数字清洗

Excel 操作 pandas 代码 说明
文本 → 分列 df['核算项目'] = df['摘要'].str.split('-', expand=True)[0] 按“-”拆成本部
TRIM 去空格 df['科目名称'] = df['科目名称'].str.strip()
查找替换“银行-”→空 df['摘要'] = df['摘要'].str.replace('银行-', '')
设置单元格格式 → 日期 df['凭证日期'] = pd.to_datetime(df['凭证日期'])
提取月份 df['期间'] = df['凭证日期'].dt.month 做月度汇总
乘 100 变成“元” df['借方'] = df['借方'] * 100 系统导出以“百元”为单位
填充空值 df['核算部门'].fillna('公共', inplace=True)

四、生成新字段(公式列)

Excel 操作 pandas 代码 说明
=借方-贷方 df['差额'] = df['借方'] - df['贷方']
=IF(差额>0,借,贷) df['方向'] = np.where(df['差额']>0, '借', '贷') 余额方向
=VLOOKUP(科目编码,科目表,2,0) df = df.merge(km_df[['科目编码','科目级次']], on='科目编码', how='left') 拉科目级次
=SUMIF(部门, A2, 借方) df.groupby('部门')['借方'].transform('sum') 部门发生额合计

五、数据透视(月度/部门/项目 汇总)

Excel 操作 pandas 代码 说明
行=科目 值=sum(借方) pivot = df.pivot_table(values='借方', index='科目名称', aggfunc='sum') 科目发生额
多维度 行=部门, 列=期间 df.pivot_table(values='借方', index='部门', columns='期间', fill_value=0) 部门-月度矩阵
计数 df.pivot_table(values='凭证号', index='部门', aggfunc='count') 部门凭证张数

六、去重、排名、排序

Excel 操作 pandas 代码 说明
数据 → 删除重复 df.drop_duplicates(subset=['凭证号','行号'], inplace=True)
排序 借方降序 df.sort_values('借方', ascending=False, inplace=True) 大额凭证在前
排名次 df['rank'] = df['借方'].rank(method='min', ascending=False)

七、匹配拼接(VLOOKUP / XLOOKUP 场景)

Excel 操作 pandas 代码 说明
VLOOKUP 汇率 df = df.merge(hl_df, on='币种', how='left') 拉当日汇率
多条件匹配 df = df.merge(bank_df, on=['账号','交易日期'], how='left') 银行回单匹配

八、分类汇总(SUMIF / COUNTIF 系列)

Excel 操作 pandas 代码 说明
=SUMIFS(借方, 部门, A2, 期间, B2) df.groupby(['部门','期间'])['借方'].sum() 部门月度借方合计
累计发生额 df['累计借方'] = df.sort_values('凭证日期').groupby('科目编码')['借方'].cumsum()

九、快速统计描述

Excel 操作 pandas 代码 说明
平均数、标准差 df['借方'].describe() 看大额分布
相关系数 df[['借方','贷方']].corr()

十、批量写回/拆分文件

十一、一键画财务趋势图

十二、30 秒模板:从 CSV 到科目汇总表

把这张速查表贴在桌前,月末再遇到“透视表卡死 / VLOOKUP 报错 / 文件 200 MB 打不开”时,直接翻左侧 Excel 动作→右侧 pandas 一句代码,复制即可跑,基本就能告别“蓝色滚动条”。