2000-2024年上市公司基本信息数据:字段清洗与应用

发布时间:2026/10/11 17:57:44
2000-2024年上市公司基本信息数据:字段清洗与应用
做金融研究或者数据的人应该都体会过一种痛苦想看一家公司的基本信息翻官网、翻年报、翻各种平台好不容易凑齐了一份名单结果发现时间跨度不够、字段缺失、数据口径还对不上。尤其是想把2010年、2015年、2024年这些不同年份的数据放在一起做对比分析时光是把证券代码、公司简称、所属行业、注册地这些基础字段统一起来就能耗掉大半天。我整理2000-2024年上市公司基本信息数据这个项目就是想把这段将近25年的市场信息沉淀下来做成一份可以即查即用、也方便二次加工的基础数据库。这份数据覆盖了自2000年以来在公开市场上市的公司主体包含证券代码、公司全称、简称、上市板块、上市日期、所属行业、注册地、注册资本、员工人数、主营业务等核心字段无论你是做学术研究、行业分析还是搭量化策略的股票池都能直接拿过去用。这篇文章会把我整理这份数据时的设计思路、字段选择逻辑、清洗过程、踩过的坑和实际应用场景都展开讲清楚希望能帮到正在做同类工作的人。1. 项目定位与数据范围拆解1.1 为什么选择2000年作为起点先聊一个最基础的问题为什么是2000年到2024年而不是从1990年代开始国内公开资本市场起步于1990年代初期早期的上市公司数量少、信息披露也不够规范很多基础字段比如员工人数、主营业务构成、实际控制人信息当年的披露格式跟现在差异非常大。如果强行把1990年代的数据也纳入清洗和口径统一的成本会成倍增加而且当时的数据样本量对做统计分析来说意义有限。相比之下2000年之后信息披露制度逐步完善上市公司的基本资料开始有了相对标准化的模板数据质量明显上了一个台阶。以2000年为起点既能覆盖超过20年的完整周期又能在数据质量与时间跨度之间取得一个比较平衡的状态。1.2 覆盖对象从存量公司到历史退市主体这个数据库的核心覆盖对象并不只是当前仍在交易的公司而是2000年至2024年间曾经在公开市场上市的公司主体。这意味着两件事第一仍在正常经营交易的上市公司都在库里第二那些因为并购重组、私有化、经营困难等原因退市或者被吸收合并后不再独立上市的公司只要它们在2000年之后存在过也都会被收录。这个设计思路非常关键。很多做长期回溯分析的人都会遇到一个让人很头疼的问题如果只用当前存量的上市公司名单去研究历史那就犯了幸存者偏差的错误。比如你想研究过去十年破产公司有什么共同特征结果数据库里全是活下来的公司这个研究从一开始就不成立。所以我在这份数据里特意保留了退市和吸收合并的主体并给它们打上了状态标记比如正常上市、暂停上市、终止上市、吸收合并。使用的时候你可以按状态过滤也可以全量保留做生存分析。1.3 时间维度的组织方式时间维度上我采用了两种数据组织方式的结合。一种是截面快照方式即每家公司一条记录记录的是该公司在库状态下的最新基本信息另一种是逐年变更日志方式即记录公司在每一年发生的关键信息变更比如公司简称变更、注册地址变更、行业分类变更、主营业务调整等。把这两类数据放在一起既能满足现在这家公司是什么情况的查询需求也能回答这家公司在某一年叫什么名字、属于什么行业、注册地在哪的历史追溯问题。这样做的好处是做横截面研究时用快照表做面板数据分析时用年度变更表各取所需不用再自己根据当前数据反向推断历史信息。而且信息变更日志这种明细粒度在遇到参数对齐问题时非常有价值。2. 核心字段设计与选择逻辑2.1 身份标识字段代码与简称体系的稳定性问题证券代码是整个数据库的主键也是所有关联操作的基础。这块内容虽然看起来基础但实际整理时是最容易出现疏漏的地方。早期市场上有过一段代码不规范的历史比如某些公司在不同市场阶段使用过不同长度的代码换板上市时代码还会发生变化。处理这类问题时我采用的规则是以当前有效的6位证券代码作为主代码同时保留历史使用过的代码字段方便跨时间段关联。不要小看证券简称这个字段。公司改名这件事在A股市场太常见了一年内改两三次简称的公司都真实存在。如果你做事件研究或者舆情分析时只根据简称去匹配数据很容易因为简称变更导致匹配失败。我的处理方式是全称、当前简称、曾经用过的简称分别设为独立字段并且把简称变更记录单独存成一张日志表包含变更前的简称、变更后的简称、生效日期。2.2 市场属性字段板块与上市状态市场属性字段回答了这家公司在哪里上市、什么时候上市、现在什么状态这些基础问题。这里我拆分为四个独立字段上市板块、上市日期、退市日期或终止上市日期、当前状态。上市板块这个字段要特别说明。不同时期板块的划分口径不太一样比如早期的A股、B股之分后来有了主板、中小企业板再后来又有了创业板以及之后推出的科创板。如果你直接把这些板块名称都塞进一个字段里做分析时就会面临口径混乱的问题。我的做法是既保留原始披露的板块名称同时提供一个按当前通行框架标准化后的板块分类这样两种口径的筛选都能支持。上市日期字段看着简单但里面有一个容易混淆的细节公司正式挂牌交易的日期和公司注册成立日期以及首次公开发行的日期这三者并不是同一个概念。数据库里必须明确标注每个日期字段的含义否则做公司年龄相关分析时就会算出错误结果。我在这份数据里分别设置了成立日期、上市日期、退市日期三个字段并在字段说明中给出了明确的定义。2.3 业务属性字段行业与主营业务的粒度选择行业分类字段是很多研究场景中的关键分组维度。这里存在一个标准不统一的经典问题监管机构发布的行业分类、券商研究常用的行业分类、公司自己申报的行业分类三者的划分逻辑和精细程度都不一样。同一个公司在不同分类体系下可能属于完全不同的行业门类。我在这份数据中选择了同时保留多个维度字段的方式监管机构门类、监管机构大类、券商常用行业分类这样使用的人可以根据自己研究的需要选择合适的粒度。主营业务字段的处理也比较讲究。早期很多公司属于多元化经营主营业务一栏能写好几行如实反映没问题。但如果你要做行业集中度分析这种混合描述会带来不小的麻烦。我的处理方式是把主营业务的原始描述完整保留同时人工辅助提炼出一个主导业务标签用简洁的短语概括公司最主要的业务方向。这个标签是我在整理数据过程中逐步积累起来的也是这份数据的一个附加价值。2.4 公司基本信息字段注册地、注册资本与员工人数注册地、注册资本、员工人数这些字段属于上市公司基本信息里看起来简单、实际上复杂的类型。注册地的难点在于行政区划调整。过去二十多年里国内不少地区的行政区划发生过调整有的县变成了区有的地级市范围发生了变化。如果只是简单记录原始文本就难以直接用于区域维度的统计分析。我在这份数据中既保留了注册地的原始描述也扩展出了省、市、区县三级地理字段其中地理字段是根据最新行政区划标准化过的。注册资本字段需要留意单位统一问题。不同时期公司披露注册资本的币种和单位可能不一样有以万元为单位的也有以亿元为单位的个别公司还会披露外币注册资本。数据处理时需要注意统一折算方式同时保留原始数值和标准化数值两个版本。员工人数这块比较特殊因为很多公司只在年报中披露员工总数但不同年份的披露口径会有细微差别比如是否包含子公司员工、是否包含劳务派遣人员等这些细节很难一一追溯校准我在字段说明里做了相应提示。3. 数据来源获取与合规性考量3.1 公开披露数据不是简单的下载汇总构建这样一份数据库数据来源是绕不开的话题。我的原则是只使用可以合法获取的公开信息源不涉及任何内幕或非公开渠道。第一手来源是各交易所官方网站和公司发布的定期报告、招股说明书等披露文件这部分数据权威性最强但收集成本较高需要逐家下载并解析PDF或公告文本。第二手来源是专业财经数据平台和学术数据库这些平台会把披露信息整理成结构化数据直接可以导出Excel或CSV但通常需要付费而且不同平台之间的字段定义和覆盖范围有差异。实际操作中我的方案是以公开披露原始文件为底稿以结构化平台数据为辅助补充。这样做的原因是结构化数据平台通常更干净方便但字段覆盖和口径可能与原始披露文件有细微出入以原始文件为准更稳妥。两个来源交叉比对之后再进入清洗流程能有效减少数据录入错误和口径偏差。3.2 数据采集过程中需要注意的合规红线聊到数据采集必须提醒一件事即使是公开数据采集和使用也不是完全没有边界。有几个原则我个人一直在遵守第一只采集公开披露的公告信息不碰任何通过非公开渠道才能获得的信息第二采集频率和方式要克制避免对目标网站服务器造成压力第三如果使用的是商业数据库的数据要留意授权范围区分个人学习使用和商业用途。这些都是基本的合规意识。另外补充一点关于数据版权。交易所发布的公告和上市公司披露的年报其内容在合理引用范围内可以用于研究和分析但如果要把整理后的数据产品进行商业化分发建议咨询专业人士确认授权边界。我的这份数据目前主要用于学习和研究目的如果读者有商业化用途建议自行做好合规审查。3.3 从零爬取与使用现成数据的取舍我在整理过程中既试过自己写程序从公开页面和公告文件里解析提取数据也大量使用了现成的结构化数据源。说句实在话自己写解析程序的体验是初期成本极高但后期可控性和定制性都非常好。尤其是处理PDF年报中的非结构化信息、识别表格边界、处理字体编码问题每一项都够让人调试好几天。如果只是想做一次性分析我更建议直接从可靠的结构化数据源开始把省下来的时间花在数据校验和应用上。当然自己解析也有不可替代的价值。当需要提取某些独特字段比如公司治理细节、高管背景、股东持股变化而这些字段在现成数据平台里没有标准化输出时定向解析就是唯一的办法。4. 数据清洗与标准化处理全流程4.1 去重与主键唯一性校验数据清洗是这份工作里消耗时间最多的环节没有之一。第一道关卡就是去重。同一个公司可能出现在多个数据源里不同数据源的代码格式可能有差异比如有的带交易所后缀有的不带有的使用全角字符符号有的使用半角字符。我写的清洗流程中第一步就是把所有代码统一为6位纯数字格式去掉所有分隔符和前后空格然后再做唯一性校验。千万不能小看这一步。我在清洗时发现由于来源不同的原因同一家公司在库中被重复记录了的情况并不少见有的甚至两条记录的注册地址和员工人数还不一致。去重规则上我以证券代码为主键配合公司全称做二次校验只有当证券代码与公司全称都一致时才算确定重复。如果代码一致但全称不一致就需要进一步查证是否发生了公司更名这种情况记录到变更日志里而不是简单删除。4.2 缺失值处理策略缺失值处理是一个需要分字段区别对待的事情。有些字段的缺失是正常的比如尚未有退市记录的公司退市日期天然就是空值没有发生过更名的公司曾用简称字段也是空值。这类情况必须保留空值不能填充否则会污染数据。另外一些字段的缺失则是数据采集遗漏导致的比如早期个别公司没有披露员工人数这种情况我倾向于从历史年报或权威平台补录如果实在补不到就在数据中保留空缺并在备注字段里标注原因。有一个容易忽略的点注册资本中缺失和员工人数缺失的处理逻辑应该不同。注册资本缺失在早期公司中比较常见且很难从其他渠道准确推断员工人数缺失则通常可以通过历史财报或招聘信息补全大致区间。所以我并没有对整体数据做统一的缺失值填充而是针对每个字段单独制定了一套处理规则。4.3 公司名称变更与代码变更的关联处理前文提过公司更名在市场中非常频繁。从数据处理角度说更名最直接的影响就是主键变动和数据关联失败。我处理这个问题的思路是建立一张独立的证券信息变更历史表按时间顺序记录每一个主体的关键信息变更事件证券简称变更、证券代码变更少数情况、行业分类变更、注册地址变更、公司全称变更等。这张变更历史表非常实用。举例来说如果你想研究某家公司更名事件对股价的短期影响直接从变更表中查出更名公告发布日期再到行情数据里去截取前后窗口整个过程就是一次简单的表关联。如果没有这张表你就只能逐个公司去翻公告效率和准确率都无法保证。4.4 行业分类口径的标准化映射行业分类的统一是我花了最多精力整理的部分之一。不同数据源给出的行业分类存在三类差异一是分类体系不同是监管行业分类还是券商行业分类二是分类版本迭代同一个分类体系在不同年份也做过多次调整三是分类粒度的差异有的分到门类级别有的分到大类或中类级别。我在这份数据中的处理方式是同时保留三个行业字段。第一个是原始行业描述来自公司公告或数据源的原文第二个是标准行业门类对应监管机构分类体系中的门类第三个是标准行业大类对应监管机构分类体系中的大类。这样使用者可以按门类做宏观分析也可以按大类做细分行业研究。需要说明的是由于监管分类体系在不同年份有过调整我在映射过程中以更新后的分类架构为准同时对部分行业归属调整过的公司记录做了标注。4.5 数据存储格式与数据库结构清洗完成后的数据最终存储为分层级的数据表结构。第一层是公司基本信息主表以证券代码为主键一企一条记录第二层是历史变更明细表记录了所有关键字段的变更记录第三层是辅助维度表包括行业分类映射表、行政区划调整表、简称变更对照表等。存储格式上我同时提供了CSV和SQLite数据库两种格式。CSV适合直接用Excel或者Python的pandas读取适合大部分简单查询和分析SQLite适合需要多表关联查询的场景而且文件小巧不需要额外安装数据库服务。如果读者需要进行大规模的数据处理和复杂查询也可以把这两张CSV导入到专业的数据库系统中。5. 数据质量的校验方法与过程中的教训5.1 多源交叉验证数据整理完成后最重要的环节不是完成而是校验。我用的第一个校验方法是多源交叉验证从两个完全独立的数据源各取同一批公司的数据比较证券代码、公司全称、上市日期、所属行业这些核心字段的一致性。不一致的地方就是需要人工复核的地方。这里特别要提醒交叉验证不应该只抽查几条记录而应该对全量数据做字段级别的比对。我当时做抽查时发现过一个有意思的问题早期有家公司在公告中明确写了上市日期为某年某月某日但在某个数据平台里记录的准备日期却比实际晚了一年多。后来核查发现平台记录的是开始连续披露年报的时间而不是股票挂牌交易的时间。这种概念混淆在非专业的数据平台里其实相当常见做交叉验证时一定要留意字段定义是否一致。5.2 静态特征与动态事件的双重校验有些字段的合理性检验可以通过规则自动完成这个环节比较建议写脚本处理。比如上市日期必然晚于公司成立日期这条规则几乎对所有正常公司都成立。再比如退市日期不能早于上市日期员工人数理论上应该大于0注册资本规范化后应该大于0。这些静态规则的校验虽然简单但能抓住不少低级错误。动态事件的校验则相对复杂一些。比如某家公司变更了注册地址那么变更生效日期应该在公司成立日期之后、在退市日期之前。又比如公司简称变更事件的生效日期不应该早于上市日期。这类校验逻辑可以检测出一些跨表的不一致问题值得花时间写成本子。5.3 整理过程中踩过的三个典型坑第一个坑是历史数据中注册地址和办公地址混用。公司的注册地址和实际办公地址在很多公司并不一致部分数据源在录入时会把办公地址写到注册地址字段里。这类错误很难通过程序自动识别只能依靠比对原始披露来发现。我的解决方案是在数据中增加了一个地址类型标记只有在明确来源的情况下才把地址标记为注册地址否则标记为未确认地址。第二个坑是吸收合并场景下的主体存续判断。很多公司被吸收合并后存续主体是并购方标的主体消失。但如果只看基本信息主表很容易把这类公司误判为退市公司。我通过状态字段区分了终止上市和吸收合并终止两种情况并把并购方信息补充在了备注里这样才能更准确地支撑事件类研究。第三个坑是员工人数这个字段的口径漂移问题。不同年份、不同公司披露员工总数的统计范围不一有的包括子公司有的仅包括母公司有的包含劳务派遣有的不包含。如果直接用这个字段做人力资本相关研究结论可能会偏。我选择保留原始披露值同时增加了一个口径说明的文本字段予以提示虽然这样能改善问题但读者使用时仍需小心。6. 典型应用场景与数据分析示例6.1 学术研究中的面板数据构建上市公司基本信息数据在学术研究中最大的用途之一是构建非平衡面板数据集。比如你想研究企业上市前后研发投入的变化趋势就需要把每一家公司在上市年份、上市前一年、上市后若干年的财务数据与基本信息拼接在一起。有了统一的证券代码和上市日期字段这个拼接过程就会非常顺滑。具体操作时建议把基本信息主表按证券代码关联到财务数据表再把历史变更表按证券代码和年份关联上去。如果某年公司发生过名称变更年份关联时需要把变更生效日期考虑进去确保当年的名称与截止到该年末的最新名称一致。我在整理数据时已经把变更表的生效日期规范化成标准日期格式直接用即可。6.2 量化策略中的股票池构建对于做量化的人来说一个靠谱的股票池是整个策略的地基。很多常见的股票池筛选条件比如剔除ST公司、剔除上市不满一年的次新股、剔除特定板块、按行业分类分组都需要从基本信息数据中提取字段。有了这份数据你可以按上市日期字段直接过滤次新股按状态字段剔除已经退市的标的按行业字段进行行业分层抽样。这里分享一个实际经验做股票池时当前状态字段应该优先作为第一个过滤条件。很多人在做回测时没有剔除那些后来退市的公司导致回测结果虚高这就是幸存者偏差的典型表现。我在这个数据集中通过状态字段把这个过滤条件变得很简单你只需要在查询时加一个状态条件的过滤即可。6.3 行业分布与区域分布的结构性分析借助行业字段和注册地区字段可以快速做出上市公司的产业结构图和区域分布图。比如你可以统计这么多年里不同行业门类的公司数量变化趋势看哪些行业经历了明显的扩容期哪些行业始终数量稀少。也可以按省或城市统计上市公司注册地的分布观察区域资本市场的活跃度差异。这类分析对政策研究、区域经济研究、产业研究都有直接参考价值。使用数据时注意行业字段应该以标准行业门类或大类为准区域统计时尽量使用规范化的省市区三级地理字段避免因为行政区划调整造成统计口径的断裂。7. 后续扩展方向与数据维护思路7.1 与财务数据、股本数据的关联扩展目前这份基础信息数据主要聚焦在公司身份层面如果要深入做研究还需要与财务数据和股本数据做关联。标准的关联字段就是证券代码加上时间字段后还可以按年份或季度做面板关联。建议的使用方式是把基本信息表作为维度表财务数据表作为事实表按证券代码和时间进行左连接这样可以避免维度数据被事实数据稀释。搭建关联结构时有一个细节值得注意财务数据的报告期通常用报告截止日期标识以自然年为例是某个年份的12月31日而基本信息数据里很多字段会随时间变化。生成年度面板时建议先按年份排序每个主体的最新信息然后再与年度财务数据进行关联。7.2 衍生指标的构建有了基础字段之后还可以进一步构建衍生指标。比如公司年龄可以通过当前日期减去成立日期得到直接反映企业存续时间上市年限则可以通过当前日期减去上市日期得到。再比如通过员工人数的增长率可以构建企业规模扩张指标通过注册资本与员工人数的比值可以做一个粗略的资本密集度判断。需要注意的是衍生指标的质量完全取决于底层数据的质量。如果员工人数字段本身就存在口径漂移那基于它计算的增长率在跨公司比较时就要格外留意。建议在做衍生指标之前先把基础字段的缺失情况和口径说明仔细检查一遍。7.3 持续更新的维护机制数据不是一次整理完就结束了尤其是上市公司基本信息每年都会有新上市、退市、更名、行业调整等变化。我的维护策略是每年做一次年度快照更新集中补录该年度内新增的上市公司数据同时排查在库公司的状态变化和信息变更并把所有变更行为追加到历史变更表中。更新的节奏建议固定在年报披露期结束之后因为那时上市公司的基本信息和上一年度数据都已经披露完整集中更新效率较高。如果平时需要获取突发数据变化可以及时跟踪公告的披露信息再在年度快照中统一校正。最后想再多说几句。整理这份2000-2024年上市公司基本信息数据的过程让我真切体会到基础数据是研究的生命线这句话的含金量。市场本身的信息流转效率虽然很高但真正要把这些散落的信息沉淀成一套规范、可信、可复用的数据资产中间要花的整理功夫远比想象中更多。好在这份数据做出来后后续再做各类研究分析时省下来的时间和避免的弯路相当可观。哪怕你没有从事数据相关的工作只是偶尔要做一份行业报告或者公司分析我觉得这套方法论里的数据口径统一历史变更追踪多源交叉验证这几个思路也是完全值得参考和借鉴的。至于数据本身后续我会继续保持年度更新的节奏也欢迎在实际使用中遇到问题时多交流毕竟每一个使用者的反馈都是让这套数据变得更完整、更可靠的重要来源。