深圳融克迪特科技有限公司 Logo,金融科技,量化交易,软件开发

深圳融克迪特科技有限公司

RONG CREDIT TECHNOLOGY CO., LTD.

基础入门

【pandas 系列 第4讲】处理缺失值

围绕收益率列首行空值这一最典型场景,练习缺失值统计、识别和最小清理动作,建立先看清问题再处理数据的基础习惯。

2026-04-23 智铨研究 阅读时长 5 分钟

目录

pandas · 入门短课

  1. 第 1 讲【pandas 系列 第1讲】金融数据入门第1讲:5行命令读取CSV行情并验证结构完整性
  2. 第 2 讲【pandas 系列 第2讲】选列筛行:保留日期收盘价和成交量
  3. 第 3 讲【pandas 系列 第3讲】新增收益率列
  4. 第 4 讲【pandas 系列 第4讲】处理缺失值
  5. 第 5 讲【pandas 系列 第5讲】排序并重置索引
  6. 第 6 讲【pandas 系列 第6讲】计算5日和10日均线
  7. 第 7 讲【pandas 系列 第7讲】按月份统计平均收益
  8. 第 8 讲【pandas 系列 第8讲】导出清洗后的行情表

一、为什么金融数据里的缺失值问题,不应该等到后面出错了再回头处理

很多人做 pandas 练习时,对缺失值的态度往往是被动的。也就是前面先一路往下做,等到某一步出错、结果奇怪,才突然意识到原来表里一直带着空值。这样的节奏在入门阶段尤其常见,因为刚开始大家更关注“代码能不能跑”,还没形成“数据状态要先确认”的习惯。可一旦进入收益率、均线、滚动统计这些步骤,缺失值就不再是一个可以晚点再说的小问题,它会沿着整条处理链一路传递,最后让结果越来越难解释。

这就是为什么 pandas 金融数据短课的第 4 讲必须单独讲缺失值处理。不是因为空值本身复杂,而是因为处理顺序很重要。真正稳的方式,不是等问题爆出来再补救,而是在它刚出现、来源又非常清楚的时候,就把识别和处理的习惯建立起来。当前最好的样本,恰恰就是上一讲收益率列自然产生的首行空值。

也就是说,第 4 讲并不是在讲一个抽离主线的补充技巧,而是在教你如何把工作表维持在“继续往后做也心里有底”的状态。对后面每一讲,这都会产生连锁帮助。

二、为什么空值不能一概而论,先分清“正常空值”和“异常空值”特别重要

很多新手一提到缺失值,脑子里只有一种统一印象:空值就是脏数据,应该赶快删掉或者填上。这个理解太粗了。因为在金融数据处理中,空值并不总是坏事,它有时只是某个定义自然产生的结果。比如上一讲里 return 列第一行为空,就是因为第一行前面没有上一期价格可比。这类空值不是异常,而是公式逻辑的一部分。

和它相对的,则是那些真正值得警惕的空值,例如原始收盘价中间突然缺失、成交量大片为空,或者日期解析失败后变成空值。这些问题会直接影响后面的分析可信度,处理方式也不能简单照搬。也正因为如此,第 4 讲最重要的第一步不是“删”,而是先学会分辨来源。

只要你先建立了“正常空值”和“异常空值”要区分看待的意识,后面很多处理动作都会更稳。否则你很容易把本来有意义的结构信息也一起抹掉,或者把真正严重的问题误当成正常现象带过去。

三、为什么统计空值个数,是所有处理动作之前最应该固定下来的习惯

一看到空值就直接 dropna(),是很多人入门阶段的本能操作。虽然它有时能快速清掉问题,但更稳的顺序其实是先统计。因为只有当你知道每一列到底有多少空值、主要集中在哪几列,问题才真正变得具体。否则你只是模糊地知道“好像有空值”,却说不清它的规模和位置。

统计这一步的价值非常大。它会把原本抽象的不安感,变成一个你能描述的问题图景。比如你会发现,return 列只有第一行一个空值,这显然和“整列大面积空缺”是两种完全不同的情形。又或者你会发现空值并不只在收益率列,而是在别的关键字段里也有分布,那说明问题的严重程度已经不同了。

对入门者来说,统计空值就是一种让问题“落地”的动作。它不会替你自动解决问题,但会让你不再靠感觉处理,而是开始基于事实来决定下一步怎么做。

四、为什么当前这一步最适合采用“最小删除法”,而不是急着讲复杂填充

缺失值处理的方法可以很丰富,向前填充、向后填充、均值填充、分组填充,甚至更复杂的插值和建模方法都存在。但在当前这一讲里,最合适的并不是把方法铺开,而是先用一种最容易解释的方式把问题收住。对收益率首行这种典型场景来说,直接删除 return 为空的那一行,就是最朴素也最合理的做法。

为什么这样更适合入门?因为它没有引入额外假设。你不是在猜第一行收益率应该是什么,也不是为了“表面完整”去填一个并不真实的值,而是明确承认:这一行在收益率定义上暂时没有可用结果,所以把它从后续分析表里剔除。这个处理逻辑非常干净,也非常容易解释。

入门阶段最怕的是为了显得方法很多,一开始就把简单问题复杂化。当前更重要的是先建立一种可说明、可复查的处理思路。等后面真的遇到更复杂的空值类型,再去讨论更细的方法,会自然得多。

五、为什么“先看问题样本,再删除”是一个值得早点养成的小习惯

很多时候,哪怕你已经知道接下来大概率要删掉某些空值行,也仍然建议在删除前先把这些样本单独看一眼。这个动作看起来多余,其实非常值得。因为它会让你从“我删掉了一些数据”变成“我知道我删掉的是哪几行、为什么删、删掉后大概会发生什么变化”。

对收益率列首行空值来说,这种查看尤其直观。你一看就明白,那行本来就没有前值可比,删除以后逻辑是通顺的。这个确认过程会显著增强你对处理动作的掌控感。相反,如果你完全不看,只是习惯性一删了之,久而久之会形成一种非常危险的工作方式:表面处理很快,但对数据状态本身其实越来越陌生。

因此,第 4 讲里“先记录、再删除”的小习惯,看起来只是多两行代码,实际上是在帮你建立一种更负责任的数据处理方式。这种方式以后会反复救你,尤其在问题越来越复杂的时候。

六、为什么处理完以后还要再数一遍空值,而不是默认问题已经消失

很多人做完 dropna() 或其他处理后,会下意识觉得既然已经采取动作了,问题应该就算解决了。可真正稳的习惯,是处理完以后再统计一次。原因很简单:只有重新数一遍,你才能确认这次处理到底消除了哪类空值,还剩下哪些问题。否则你只是“做了动作”,却没有真正验证动作效果。

这个复查动作在入门阶段尤其重要,因为它会把“处理意识”闭环起来。你不再只是知道如何执行某个方法,而是开始习惯在方法之后确认结果。对当前这类简单场景来说,这一步可能看起来有点谨慎,但越早养成越好。后面当表结构更复杂、空值来源更多时,这种闭环思路会非常值钱。

换句话说,处理完再看一遍,不是多此一举,而是在告诉自己:数据问题只有在复查后才算真正被收住,而不是代码跑过就算结束。

七、为什么缺失值处理本质上是在保护后面每一步的解释能力

很多人以为第 4 讲只是为了“防止报错”,实际上远不止如此。缺失值处理更深层的意义,是在保护后面每一步的解释能力。因为你后面不管做排序、做均线、还是做按月份统计,都默认输入层已经处于一种你大致清楚的状态。如果空值问题一直含糊不清地被带着走,后面的每一列结果都会被削弱解释力。

特别是金融数据里,很多计算都带着时间顺序和滚动窗口,一两个空值可能就会影响后面若干行结果。只要你现在先把空值问题理顺,后面每一步心里都会更有底。你知道哪些值是可靠的,哪些问题已经被处理,哪些地方还需要再留意。这种“心里有底”的感觉,实际上是数据分析里非常重要的一部分。

所以第 4 讲处理的,表面是空值,实质上是在维护整张工作表的可信度和可解释性。它的重要性远高于很多人初看时的印象。

八、这一讲为排序、索引整理和后续滚动计算准备了什么

只要缺失值先理顺,后面的排序和滚动计算就会轻松很多。因为排序时你不再需要担心关键列里还混着明显不可用的记录;做均线或月份统计时,也不会一边想着分析逻辑,一边还要随时猜测结果是不是被空值拖歪了。这就是为什么第 4 讲在整套短课里位置很重要。它相当于先把表面上一块最常见、也最容易扩散的问题先收住,然后再继续走结构和时间相关的步骤。

从教学节奏上看,这也非常自然。上一讲让表长出了收益率列,这一讲处理由此产生的空值,下一讲再整理日期顺序和索引,整套链路是层层相接的。这样推进,比把缺失值当成零散补充知识要稳得多。

也正因为如此,第 4 讲虽然聚焦在一个看似琐碎的问题上,实际上却是整条 pandas 入门链路里的重要稳定器。

九、为什么缺失值处理之后,最好把“处理前后差了几行”明确记下来

很多人处理完空值后,会简单确认一下表还能继续往下用,就直接进入下一步。这当然不算错,但更稳的做法,是顺手记录一下处理前后到底少了几行。这个动作很小,却特别有价值。因为它能让你真正知道这次处理到底影响了多少样本,而不是只凭感觉觉得“应该就删了一点点”。

对当前这个场景来说,这种记录尤其直观。收益率首行空值通常只会影响很少的样本,所以你一旦把处理前后行数并排看一下,就能立刻确认这次删除是小范围、可解释的,而不是无意间把整张表削掉了很大一块。对初学者来说,这种数量感非常重要。它会帮助你建立一种很实用的习惯:任何清洗动作都不只是执行,还要知道它到底改动了多少数据。

而且,这个习惯后面会越来越值钱。因为当你遇到更复杂的缺失值场景时,行数变化往往就是第一层报警信号。现在先在最简单的收益率空值上把这个动作练熟,后面会轻松很多。

十、为什么这一讲也在帮你建立“先解释来源,再决定动作”的处理习惯

很多数据清洗之所以最后变得机械而危险,根源就在于动作先于理解。也就是一看到空值就先删,看到异常就先填,完全不先追问这些值是怎么来的。第 4 讲其实是在反过来训练一种更稳的顺序:先解释来源,再决定动作。你要先知道当前空值是收益率定义自然产生的,还是原始字段本身出了问题;先知道它只是首行现象,还是沿着整列扩散;然后才决定到底该删、该留还是该进一步排查。

这个顺序看起来更慢一点,但它会显著提升后面所有数据处理动作的可靠性。因为你不再只是学会一个个 pandas 技巧,而是在建立一种判断机制。真正成熟的数据处理,很少是“有什么问题就用什么函数怼过去”,而是先判断问题性质,再选最小且可解释的处理方式。第 4 讲正是在帮助你从一开始就走到这条更稳的路上。

十一、这一讲做到什么程度,才算真正把缺失值问题接住了

第 4 讲真正完成的标志,不是你会写 dropna(),而是你已经能围绕当前空值说清几件事:它为什么出现、它属于正常空值还是异常空值、你为什么选择最小删除法、处理前后表的行数发生了什么变化,以及处理后为什么可以更放心地进入排序和滚动计算。只要这些问题你已经能连起来讲,这一讲就不再只是“删掉一个空值”,而是真正建立了金融数据里最基础的一层清洗判断力。

从更长的学习路径看,这一讲真正带走的能力,其实不是某个具体函数,而是一种对数据状态更敏感的工作方式。你开始知道,表不是只要能跑就行,还要知道它现在处在什么状态、有哪些风险已经被处理、哪些地方仍需要保持警觉。只要这种敏感度建立起来,后面无论面对收益率、均线还是分组统计,你都会比一开始更稳很多。

十二、总结

这一讲的重点,不是简单把空值删掉,而是建立一套更稳的处理顺序:先统计,再分辨来源,再做最小而可解释的处理,最后复查结果。你需要先分清哪些空值是定义自然带来的正常现象,哪些才是真正值得警惕的数据问题。只要你已经能围绕收益率首行空值把这套顺序走通,这一讲就真正完成了。

十三、系列衔接

本讲是《pandas金融数据入门短课》的第 4 讲,当前主题是《处理缺失值》。上一讲已经在工作表上生成了第一列收益率,这一讲则把由此带来的空值问题明确接住。下一讲会继续整理表的时间顺序和索引状态,为后面的滚动均线和分组统计打一个更稳的地基。

十四、风险揭示与免责声明

风险揭示与免责声明

本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。

本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。

市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。

读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。