附源码 | 财管/经济学人必备:一键合并9张CSMAR数据表,直接跑回归!
别再手搓VLOOKUP了!一个Python脚本,10秒搞定国泰安(CSMAR)面板数据合并
又到了经管人疯狂掉头发的季节。提到做实证分析、写行业研报,绕不开的一座大山就是——洗数据。尤其是处理国泰安(CSMAR)数据库下载下来的原始表格,堪称一场灾难:
控制变量在 A 表,因变量在 B 表,财务基本面在 C 表……好不容易下好了十几张 CSV 格式的表格,准备合并时发现:❌ 股票代码有的带后缀 .0,有的不带;❌ 年份格式五花八门,有的是 2022,有的是 2022-12-31;❌ 用 Excel 的 VLOOKUP 匹配十万级数据,电脑风扇狂转,最后直接无响应卡死……
为了解决这个“经管界世纪难题”,今天我不说废话,直接开源一个我自用已久的 Python 面板数据自动化清洗与合并脚本。
你只需要把下载好的表扔进同一个文件夹,点击运行,10秒钟,它就能吐出一份干干净净、随时可以导入 Stata 或 SPSS 跑回归的 Panel Data(面板数据)。
🚀 这个脚本能帮你省去多少麻烦?
它不仅仅是一个简单的 merge 拼接工具,我把它封装成了一个傻瓜式的“清洗流水线”,内置了实证分析中最常踩坑的脏数据处理逻辑:
1. 🪪 强迫症福音:股票代码完美对齐自动识别表头,剥离烦人的 .0 后缀,并自动补齐 6 位代码(例如把 1 变成 000001)。再也不怕多表合并时代码匹配不上导致数据全部错位。
2. 📅 日期格式智能提取无论是单纯的年份列,还是财务报表里复杂的 2022-12-31 格式,代码内置了时间戳提取逻辑,统统一键转化为标准年份。
3. 🗑️ 降维打击:自动剔除冗余与残缺值实证研究通常需要剔除金融行业,本脚本会自动过滤 IndustryCode 为 J 类的企业;同时自动清理掉缺失核心指标(如资产总计、资产负债率)的废弃行,保证你的样本干净纯粹。
4. ➕ 衍生变量一键生成在合并的过程中,它甚至顺手帮你把常见的控制变量算好了!比如“企业上市年龄(Age)”、“企业规模(Size = ln(资产))”,能用代码秒算的东西,绝不让你手动拉公式。
💻 核心代码赏析
给懂行的小伙伴看一眼我们极简的底层逻辑(以最核心的智能读取模块为例):
def load_data(file_keyword): """根据关键词在目录下寻找文件并读取,同时清洗CSMAR表头""" files = os.listdir() target_file = next((f for f in files if file_keyword in f), None) if not target_file: raise FileNotFoundError(f"未找到包含关键词 '{file_keyword}' 的文件!") # 兼容 CSV 与 Excel,防报错机制 if target_file.endswith('.csv'): try: df = pd.read_csv(target_file, encoding='utf-8', low_memory=False) except: df = pd.read_csv(target_file, encoding='gbk', low_memory=False) else: df = pd.read_excel(target_file) # 自动识别并补齐6位股票代码,告别乱码 id_col = 'Stkcd' if 'Stkcd' in df.columns else ('Symbol' if 'Symbol' in df.columns else None) if id_col: df = df[pd.to_numeric(df[id_col], errors='coerce').notna()].copy() return df
🎁 粉丝专属:完整源码获取
篇幅有限,为了保证大家拿到手就能跑通,我把 完整的 .py 源码文件 打包好了。
代码里我写了极其详细的中文注释。就算你 Python 只是“半吊子”水平,只要把代码里的文件夹路径改成你自己的,就能直接一键运行,原地起飞。
👇 获取方式非常简单:
-
1. 关注本公众号:[你的公众号名字,发文前记得替换] -
2. 在后台聊天窗口发送关键词:CSMAR即可获得无套路的网盘下载链接。
如果你在运行中遇到任何环境配置或报错问题,欢迎在评论区留言,或者后台加我微信交流。
效率时代,不要把时间浪费在造轮子上,把精力留给真正的实证思考。
💡 下期预告:有了干净的数据后,如何用 AI 辅助我们快速产出变量描述性统计与相关性分析表?记得星标本号,防走丢!
夜雨聆风
