基础入门
把原始行情表缩成只保留日期、收盘价和成交量的工作表,练习最基础也最常用的选列与筛行动作,为后续收益率、均线和统计分析建立一张边界清晰的练习表。
很多人学 pandas 时,最容易形成一种表面上很勤奋、实际上很低效的习惯:拿到一张原始表以后,马上开始在整张大表上做各种运算,似乎列越多、操作越多,就说明自己正在“做数据分析”。但只要真的开始动手几次,就会很快发现一个问题:原始表往往包含很多当前并不需要的字段,如果不先把任务范围收窄,后面代码会越来越冗长,问题也越来越难定位。
所以 pandas 金融数据短课的第二讲,故意不急着新增复杂函数,而是先解决一个特别基础但极其高频的动作:把原始行情表缩成一张只保留当前核心字段的工作表。这个动作看起来简单,实际上非常重要。因为它决定了你后面是在一张清楚、边界明确的表上继续推进,还是一直抱着一张噪声很多的大表硬算。
对入门者来说,这一步最值得学的,不是某一行代码,而是一种顺序意识。也就是:先缩表,再继续。只要这个顺序先建立起来,后面很多看似复杂的问题都会变得容易许多。
很多人第一次处理数据时,会默认读进来的那张表就是自己之后一直要使用的表。实际上,原始表和工作表最好区分开来。原始表更像是输入材料,它尽量保留源数据原貌;工作表则是你为了当前任务主动整理出来的一张中间表。两者的目的完全不同。
这个区分之所以重要,是因为当前任务往往并不需要源表里的全部信息。比如在一个非常基础的金融数据练习里,你可能当前只关心日期、收盘价和成交量,那么继续带着代码、开盘价、最高价、最低价等一堆列往前走,除了让视野更乱,并没有太多好处。相反,只要先整理出一张小一些的工作表,你后面做收益率、均线和基础清洗时,注意力就会更集中。
一旦“原始表不等于工作表”这个观念建立起来,你后面处理别的数据时也会自然更清楚:什么该保留为原始层,什么该整理成当前任务的操作层。这是非常值得尽早形成的数据习惯。
在金融数据里,日期几乎永远都是最不应该轻易丢掉的一列。因为后面无论你做收益率、滚动均线、缺失值检查,还是排序、重置索引、按时间聚合,都离不开时间这个主轴。很多初学者在缩表时,容易只盯着价格列和成交量列,觉得反正当前要算数值,日期暂时好像没那么重要。其实恰恰相反。
日期的价值不只是在“标识每一行是哪一天”,更在于它决定了后面整个时序分析的秩序。没有日期,你很容易看不清顺序有没有错,也很难判断当前结果是不是沿着正确的时间方向生成的。对于金融数据来说,这种顺序感比很多人一开始以为的要重要得多。
所以第 2 讲里,把 date 放进最小工作表,不只是因为它常见,而是因为它几乎是后面所有时序步骤的锚点。只要这个锚点先保住,后续很多操作都会更稳。
在原始行情表里,价格相关字段往往不止一个。开盘价、最高价、最低价、收盘价都在,但如果你要给入门者选出最值得优先保留的一列,通常还是收盘价最合适。原因很务实。因为大多数最基础的练习,例如日收益率、简单均线、滚动统计,都会先从收盘价开始。它在很多研究和实务场景里,也是最常被拿来做日频指标计算的一列。
更重要的是,收盘价的语义对初学者比较直观。你不需要同时去思考日内最高最低的波动范围,也不用一开始就讨论开盘缺口或者盘中路径。先把收盘价这条主线拿稳,能显著降低入门负担。等后面需要扩展到更多价格列时,再把其它字段带回来也完全来得及。
因此,第 2 讲选择保留 close,本质上是在帮你为后面一系列最常见的基础计算预先打底。它不是说别的价格没用,而是当前阶段先抓主干更重要。
除了日期和收盘价,成交量也是一列很值得尽早保留的字段。很多初学者一开始会觉得,既然当前主要讲价格相关计算,那是不是只留日期和收盘价就够了。其实把成交量也一起保留下来,有两个明显好处。第一,它本身就是金融数据里非常基础、非常常见的活跃度信息。第二,它能帮助你更早习惯“工作表里保留少量但彼此互补的核心字段”,而不是只剩一列价格孤零零地往前走。
在后面的很多练习里,成交量不一定每一讲都会直接参与计算,但它作为一个常见业务字段提前留在工作表里,会让你更接近真实场景的数据结构。真正的金融数据处理,很少只看一列价格。即便当前不展开量价关系,先把 volume 留住,也是在为更自然的后续练习留空间。
换句话说,第 2 讲里保留成交量,不是要把事情复杂化,而是让你的工作表既足够小,又不至于小到失去基本业务感。
选列只是工作表整理的一半,另一半是做最小筛行。很多时候,原始表里会有一些当前明显不可用的记录,比如收盘价或成交量为空。如果你明知道这些行后面一做计算就会出问题,却还把它们完整带到下一讲,实际上是在把问题往后拖。第 2 讲在这里引入一个非常轻量的筛行动作,意义就在于把这种最容易确定的无效行先清掉。
这里强调“最小筛行”很重要。因为入门阶段并不适合一开始就讲非常复杂的过滤规则,否则很容易让人把重点从“整理出清楚的工作表”转移到“设计复杂筛选条件”上。当前最合适的做法,是先删除那些显然会妨碍后续基础计算的空值行,让表重新回到可继续加工的状态。
只要你把这一步看成“为后续步骤减负”,而不是“过度清洗”,它就会显得非常自然。毕竟后面的收益率、均线和简单统计,本来就需要一个至少在关键字段上可用的输入层。
很多教学文档在讲选列时,会很快略过 copy(),觉得这是一个后面再补的细节。但对入门者来说,这个细节其实非常值得早点养成。原因很简单:你一旦决定把原始表和工作表分开管理,那么工作表最好真的成为一份独立副本,而不是继续和原始表模糊纠缠在一起。
这样做的价值在后面会越来越明显。因为你之后会不断在工作表上新增列、处理缺失值、改索引、做排序。如果当前这张表和原始输入之间边界不清,调试时就特别容易混乱。你会搞不清自己到底修改了哪一层数据,也不容易回到更原始的状态重新检查。
所以,像 copy() 这种看似很小的习惯,其实是在帮你建立一个更清爽的数据工作流。它不只是为了避免某个警告,更是在强化“原始输入”和“当前工作面”应该明确分层的意识。
如果说第 1 讲解决的是“把 CSV 正确读进来”,那么第 2 讲真正建立的,就是缩表意识。也就是你开始知道,数据读进来以后,不应该立刻在整张大表上硬做所有事情,而应该先问自己:当前任务真正依赖哪几列,哪些行现在就明显不可用,能不能先整理出一张更小、更清楚、更适合继续加工的工作表。
这种意识在 pandas 学习里非常重要。因为后面你做的很多事,本质上都是在一张已经被你整理得更合理的表上继续追加动作。只要这一层先做对,后面新增收益率、处理缺失值、排序重建索引时,思路都会清楚很多。相反,如果一直抱着大表不放,后面哪怕只是一个很基础的计算,也会显得比实际复杂不少。
入门阶段越早形成缩表意识,后面就越不容易在无关字段和无关问题里打转。
很多人做完选列筛行之后,会直接进入下一步计算,觉得反正代码已经写完了,表自然也就整理好了。更稳的做法,是在这一讲结束前立刻打印一次新表的列顺序和前几行。这个动作的价值很大,因为它能帮助你马上确认:当前工作表里到底只剩下哪些字段,列顺序是不是自己预期的那样,筛行之后数据看起来是否仍然合理。
这个检查看似朴素,但对入门非常关键。因为缩表动作本身就在为后续计算准备输入层,只要这一步有一点偏差,比如列没选对、筛行条件过头、顺序不清楚,后面收益率和均线那几讲的排错成本都会明显上升。只要现在先看一眼整理后的结果,你就能在非常早的阶段把这些小问题拦下来。
所以,第 2 讲真正稳的结束方式,不只是“代码执行过了”,而是“我已经看到一张更小、更清楚、真的可以往下用的工作表”。
缩表最大的好处之一,往往不是立刻体现在某个指标上,而是体现在后面每一讲都更轻了。因为你每少带一列无关字段往后走,后面的打印、检查和解释都会更简单一些。尤其对初学者来说,认知负担本来就很容易超载。一张太宽的表会让你在每次查看结果时,都不断被当前并不需要的信息打断。
第 2 讲之所以值得单独强调缩表,正是因为它在帮你提前清理这些干扰。你后面每一次新增列时,都更容易看清自己到底加了什么;每一次查看表头时,也更容易判断异常是不是来自新动作,而不是原始表里本来就混着很多暂时无关的信息。这个价值会在后面连续几讲里越来越明显。
第 2 讲如果只停在“我已经把列选出来了”,其实还差最后一个很重要的判断。也就是你要主动问自己:这张工作表现在是否已经适合继续进入下一讲的计算。这个判断非常实用,因为它会逼你重新检查几件关键的事。日期列是不是还在,收盘价列是否完整,成交量列有没有明显异常,筛行之后表是否还保留了合理的时间顺序。只要这些都稳住,后面去加收益率列时,心里会明显更踏实。
这一步的价值在于,它让你开始把每一讲之间真正接起来。你不再把练习看成互相独立的小片段,而是开始意识到:当前这一讲整理出来的结果,其实正是下一讲的输入层。只要这个输入层先判断清楚,后面每一步都会更顺。
所以,第 2 讲完成的最好方式,不只是停在代码输出,而是带着“现在这张表能继续往下算了”这个明确感受收尾。对数据学习来说,这种阶段性交接感非常重要。
现在你处理的只是最基础的行情表,看起来缩表动作很小,甚至有些像在做准备工作。但从更长的学习路径看,这个动作几乎会在所有后续数据处理中反复出现。以后无论你面对更长时间区间、更宽字段集合、更多金融对象,第一步通常都还是先缩小到当前任务真正依赖的那部分。也就是说,第 2 讲现在学到的并不是一次性技巧,而是一种会不断重复的起手式。
这也是为什么越早把它学扎实,后面越省力。你以后不需要每次都重新思考“是不是该先整理工作表”,因为这已经会变成默认动作。真正成熟的数据处理,很少是抱着原始全量表一路往后猛算,而往往是不断从原始层切出适合当前任务的更小工作层。第 2 讲正是在建立这种处理直觉。
这一讲的重点,不是多学几个函数,而是学会一个非常重要的数据处理顺序:先把原始行情表缩成一张当前任务真正需要的工作表。保留日期、收盘价和成交量,再对关键空值做最小筛行,就已经足以为后面的收益率、均线和基础清洗打下稳定输入层。只要你开始区分原始表和工作表,并养成先缩表再继续的习惯,这一讲就真正完成了。
本讲是《pandas金融数据入门短课》的第 2 讲,当前主题是《选列筛行:保留日期、收盘价和成交量》。上一讲已经把 CSV 稳定读进来,这一讲则开始把原始表整理成后续可持续使用的工作表。下一讲会顺势在这张表上增加第一列真正有分析意味的结果:收益率列。
风险揭示与免责声明
本页面内容仅用于量化研究与技术交流,旨在展示研究方法与流程,不构成对任何金融产品、证券或衍生品的要约、招揽、推荐或保证。
本文所涉历史数据、回测结果与示例参数不代表未来表现,也不应作为投资决策依据。
市场存在波动、流动性与执行偏差等不确定性,任何策略均可能出现收益波动或阶段性失效。
读者应结合自身风险承受能力进行独立判断,并在必要时咨询持牌专业机构意见。