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

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

RONG CREDIT TECHNOLOGY CO., LTD.

基础入门

【pandas 系列 第3讲】新增收益率列

在收盘价列基础上新增最基础的日收益率列,理解 pct_change 的含义、第一行空值的来源,以及如何把原始价格表推进为带衍生指标的分析表。

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 金融数据短课的第 3 讲,表面上是在新增一列 return,本质上却是在帮你完成一次思路升级:这张表不再只是被浏览,而开始能够生长出新的分析层。

二、为什么收益率通常从收盘价开始算,而不是一开始就讨论更复杂定义

金融里关于“收益”其实有很多定义方式,普通收益率、对数收益率、区间收益率、滚动收益率都可以展开很久。但在入门阶段,最重要的不是先把定义体系讲得多复杂,而是先找到一个最自然、最稳定、最容易理解的切入点。日收盘价之间的普通收益率,正好满足这个条件。

它之所以适合作为第一列分析结果,是因为依赖关系足够简单。你只需要一列收盘价,就已经能表达出“今天相对昨天涨跌了多少”。对新手来说,这种定义直观、可验证,也能直接和原始价格列并排理解。更重要的是,它为后面的很多内容打好了基础。你以后再看均线、按月份聚合收益、检查极端波动,脑子里都会围绕这一列变化展开。

入门阶段最怕的是一开始同时讨论太多收益概念,结果还没真正算出一列结果,就已经先把自己绕晕。先把最基础的日收益率做扎实,远比一开始就追求更广的定义覆盖更有价值。

三、为什么收益率列的意义,在于让你开始用“变化”而不是“水平”看数据

只看价格水平时,很多现象其实不容易直接比较。例如,一只 10 元的股票涨到 11 元,和一只 100 元的股票涨到 101 元,价格变化都是 1 元,但含义显然完全不同。收益率列的价值,就在于它把这种绝对变化重新归一成相对变化,让不同水平的价格开始可以被放到更可比的框架里看。

这个转变非常关键。因为很多金融分析的真正对象,从来都不是单纯的价格水平,而是价格变化的方向、幅度、频率和稳定性。你一旦开始用收益率看表,就等于开始从“数值大小”转向“变化行为”。这种视角转换,是金融数据练习里非常核心的一步。

也正因为如此,第 3 讲看似只加了一列,实际上是在帮你建立一种新的观察方式。以后你无论做更复杂的特征还是更简单的统计,很多判断都会比单看价格列自然得多。

四、为什么第一行是空值,不是问题,反而是应该先理解的第一件事

第一次用 pct_change() 算出收益率列时,很多人最先注意到的不是后面的数字,而是第一行居然是空值。直觉上会觉得是不是哪里没算对,或者是不是 pandas 少算了一行。其实这恰恰是收益率定义本身在起作用。因为收益率要表达的是“当前相对上一行变化了多少”,第一行前面根本没有上一行可比,自然就没有办法得到一个正常的收益率值。

这件事看似很小,却特别值得在入门阶段先想明白。因为它会帮助你建立一个很重要的习惯:新生成的分析列出现空值时,不要先慌着把它当 bug,而要先问自己,这个空值是不是定义本身带来的正常结果。对于收益率来说,首行空值就是最典型、也最正常的例子。

只要这一步先理解透,后面你处理缺失值时就不会把“正常空值”和“异常空值”混为一谈。第 3 讲其实也在为第 4 讲的缺失值处理提前铺路。

五、为什么新增列以后,一定要和原始价格并排看

对很多新手来说,一旦 return 列算出来,就会忍不住只盯着这一列的小数,好像新列既然生成了,就说明任务已经完成。其实更稳的做法,是一定把它和原始 close 列并排看。因为收益率不是凭空产生的新数据,它本质上是对价格变化的一种表达。只有把两列放在一起,你才真正能理解它在说什么。

当你同时看日期、收盘价和收益率时,会逐渐开始建立一些很直观的感受。比如价格略有上涨时,收益率是一个小正数;价格略有下跌时,收益率是一个小负数;第一行为空只是因为没有前值。这种并排观察,能把抽象的函数输出重新拉回到你看得懂的样本层面。

在数据分析里,这个动作非常值得被反复坚持。因为新增列的意义,从来不只是“程序成功生成”,而是“你能解释这列是怎么从原始列长出来的”。对入门者来说,解释能力比执行能力更重要。

六、为什么收益率值看起来很小,反而说明你开始接近真实金融数据表达了

第一次看到收益率列时,很多人会觉得数字特别小,好像不够“有戏剧性”。这其实非常正常。因为日频收益率本来大多数时候就是几个百分点以内,写成小数后会更显得克制。这不是数据没变化,而是金融数据在真实尺度上的自然样子。

这种“看起来小”的感觉,反而说明你开始接触到更真实的表达方式了。价格可以是十几、几十、几百,但收益率被统一到相对比例后,日常波动往往没有想象中那么夸张。也正因为如此,它才更适合后续比较和统计。若你一开始不适应这种尺度,很容易误以为结果“没什么信息量”;实际上,这恰恰是金融分析常用的工作尺度。

所以第 3 讲一个很重要的小提醒就是:不要因为收益率列看起来不大,就低估它的价值。越是这种不夸张的小数列,后面往往越能支撑起很多稳定分析动作。

七、为什么这一讲真正建立的,是“原始列加衍生列”的工作流意识

前两讲更多是在读数据、收数据、整理表;而到了第 3 讲,工作流开始真正变化。你第一次不是只消费已有字段,而是在原始字段基础上主动生成一列新的分析结果。这种变化很重要,因为它几乎是后续所有数据分析的共同模式。以后你做均线、波动率、滚动高低点、月度统计,本质上都是在沿用同一种工作方式:在已有列基础上长出新列,再基于这些新列继续分析。

也就是说,第 3 讲除了新增收益率列之外,更深一层其实是在帮你建立“原始列加衍生列”的工作流意识。只要这层意识先建立,后面再遇到新任务时,你就不会老是停在“表已经读进来了,然后呢”的状态,而会自然开始思考:当前最值得长出来的第一列分析结果是什么。

这是一种很关键的数据分析思维转变。它意味着你开始把 DataFrame 当作一个可以逐步加工、逐步扩展的工作面,而不是一个只能被查看的静态对象。

八、这一讲为后续缺失值处理和排序整理准备了什么

收益率列一旦出现,后面的很多问题就会变得更具体。首先,你会立刻遇到首行空值,这为下一讲处理缺失值提供了一个非常自然的样本。其次,你会开始更在意日期顺序是不是正确,因为收益率本质上依赖相邻两行的先后关系。若顺序有问题,收益率就可能“算得出来”,但语义已经偏掉。

这说明第 3 讲虽然聚焦在新增一列上,实际上已经把后面几讲的需求一起激活了。缺失值不再是抽象话题,而是你眼前就能看到的结果;排序也不再只是表面整洁,而是直接影响到收益率定义是否成立。正因为如此,第 3 讲在整套 pandas 短课里是一个非常关键的转折点。

它让后面的内容不再像散落的小技巧,而开始围绕同一张工作表持续深入。只要这一讲写稳了,后面几讲会顺很多。

九、为什么这一讲完成后,最好已经能确认“新列已经真正接进工作流”

收益率列一旦生成,很多人会自然觉得任务已经完成,因为表里确实多出了一列新结果。更稳的做法,是再往前多走一步,确认这列新结果是否已经真正接进了后面的工作流。也就是你要知道:它会把你自然带向下一讲的缺失值处理,也会让你更在意日期顺序和相邻样本关系,后面按月份聚合时也会直接依赖它。只要这些后续连接已经在你心里变得清楚,说明这列收益率不再只是“新出现的一列”,而是已经真正进入分析主线。

这个确认动作非常有价值。因为很多入门练习之所以学完就散,问题不在于没写出结果,而在于结果没有被放进更完整的链条里。第 3 讲如果能把这层链路感建立起来,后面几讲就会明显更顺,不会像一组零散技巧拼出来的练习。

十、为什么这一讲也在训练你第一次审查“衍生列是否可信”

从这一步开始,你以后每新增一列,都值得用一组类似的问题来审查它。比如:这列是从哪一列长出来的,定义是否足够清楚,结果是否和原始列的变化方向一致,有没有自然带来新的空值或清洗任务。收益率列正好是最合适的第一个练习对象,因为它来源简单、变化直观、后续影响也非常清楚。只要你在这里先把这种审查习惯建立起来,后面面对均线、滚动统计和更复杂特征时,思路就会稳很多。

因此,第 3 讲除了新增一列结果外,实际上也在帮你建立一个非常基础但很重要的工作习惯:衍生列生成以后,不只是看它有没有算出来,还要看它是否可信、是否解释得通、是否已经接进后续主线。

十一、这一讲完成时,最好已经具备什么样的验收感

如果把这一讲真正做完,你心里通常会出现一种很明确的验收感:你已经不是单纯知道某个函数名字,而是已经能把“收盘价列”“收益率列”“第一行空值”“日期顺序”这几个点放在一起解释清楚。也就是说,别人问你这列是怎么来的、为什么第一行会空、它接下来能拿去做什么,你都可以不依赖代码提示,直接说出一条完整且自洽的说明。只要这种说明能力已经出现,这一讲才算真正落稳。

这种验收感很重要,因为它标志着你已经从“照着写”往“自己能解释”迈了一步。对入门阶段来说,这比多记一个函数名字更有价值。

十二、总结

这一讲的重点,不只是会写出 pct_change(),而是第一次真正让工作表长出一列带分析含义的新结果。收益率之所以适合作为第一列衍生指标,是因为它依赖简单、解释直观、后续用途广,而且能帮助你从“看价格水平”自然转向“看相对变化”。只要你已经理解第一行为什么为空,并会把收益率和收盘价并排解释,这一讲就真正完成了。

十三、系列衔接

本讲是《pandas金融数据入门短课》的第 3 讲,当前主题是《新增收益率列》。上一讲已经把原始行情表缩成当前任务需要的工作表,这一讲则第一次在这张表上生成了真正有分析意味的新列。下一讲会顺着这个结果继续处理缺失值,把这张表进一步整理到可以稳定往后传的状态。

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

风险揭示与免责声明

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

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

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

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