知乎作者 CodeCrafter 的观点:
💡
核心思想:忘掉花里胡哨,80% 的时间在“搓数据”。
数据分析 80% 的工作,不是建模,不是调参,甚至不是可视化,而是枯燥、繁琐、但至关重要的数据清洗和规整。
而 Pandas,就是你在这 80% 时间里最锋利的武器。你绝大部分的 Pandas 操作,都应该服务于一个目的:把一份“脏”的、原始的、不规则的数据,变成一份“干净”的、规整的、可以随时用于分析和建模的 Tidy Data。
五个学习阶段
-
第一阶段:拿到数据,先“望闻问切”
-
第二阶段:定向打击,筛选与切片
-
第三阶段:核心战场,数据清洗与转换
-
第四阶段:分析的精髓,分组与聚合
-
第五阶段:数据的整合,合并与连接
思维进阶:从“能用”到“好用”
-
向量化思维 > 循环 / Apply 思维
-
链式调用(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 一句代码,复制即可跑,基本就能告别“蓝色滚动条”。