在做金融数据、企业数据或面板数据处理时,我们经常会遇到一个非常基础但高频的问题:
原始数据里的日期是完整日期,比如 2020-03-15,但实际分析时只需要保留到“年-月”,也就是 2020-03。
例如,在处理上市公司数据时,我们可能不关心具体是哪一天上市,而只需要知道公司属于哪一个上市月份。这个时候,就可以使用 Python 中的 pandas 对日期列进行格式转换。
本文将基于一个简单案例,介绍如何用 Python 快速提取日期中的“年-月”。
一、为什么要提取“年-月”?
在实证研究或数据分析中,很多数据并不是按“天”来使用的,而是需要整理成月度维度。
例如:
- 股票收益率、技术指标、市场因子等常见变量经常按月匹配;
如果日期格式不统一,后续进行数据合并、分组统计、时间匹配时,就很容易出现匹配失败或结果错误。
因此,将日期统一处理成年月格式,是数据清洗中的重要一步
二、读取原始数据
首先导入 pandas,并读取 CSV 文件:
import pandas as pd# 读取CSV文件df = pd.read_csv( r"E:\LSTKINFO_1.csv", low_memory=False, encoding='UTF-8')df.head(5)
这里使用的是 pd.read_csv() 函数,用来读取本地 CSV 文件。
其中:
可以减少读取大文件时出现的数据类型警告。
表示使用 UTF-8 编码读取文件。如果读取中文数据时出现乱码,可以检查文件编码是否与这里一致。
三、查看数据基本信息
读取数据之后,可以先查看数据结构:
这一步主要是为了确认:
在正式修改数据之前,先查看数据结构是一个很好的习惯。
四、变量名统一处理
在原始数据中,股票代码变量名可能是:
为了后续处理更加方便,可以将其统一改成小写形式:
df.rename(columns={ "StkCd": "stkcd"}, inplace=True)df.head()
这里使用的是 rename() 函数。
其中:
columns={ "StkCd": "stkcd"}
表示将原来的 StkCd 改名为 stkcd。
表示直接在原数据 df 上进行修改。
变量名统一后,后续进行数据合并、筛选、建模时会更加清晰,也能减少因为大小写不一致导致的报错。
五、提取日期中的“年-月”
本文最核心的代码是下面这一行:
df['LstDt'] = pd.to_datetime(df['LstDt']).dt.strftime('%Y-%m')
这行代码的作用是:
将 LstDt 这一列转换为日期格式,并只保留其中的年份和月份。
可以拆成两步理解。
第一步:
pd.to_datetime(df['LstDt'])
这一步将 LstDt 转换为 Python 可以识别的日期格式。
第二步:
这一步将日期重新格式化,只保留:
例如:
其中:
表示四位数年份,例如 2020。
表示两位数月份,例如 03、11。
因此:
就表示将日期转换成 2020-03 这样的年月格式。
六、检查转换结果
日期转换完成之后,可以查看前几行结果:
这一步非常重要。
因为日期格式处理看似简单,但如果原始数据中存在异常值、空值或格式不统一的日期,就可能导致转换失败或出现缺失。
所以每次完成日期转换后,都建议检查一下结果是否符合预期。
七、保存处理后的数据
最后,可以将处理后的数据保存为新的 CSV 文件:
df.to_csv( r"E:\桌面\上市日期.csv", index=False)
这里的:
表示保存时不额外输出 DataFrame 的索引列。
如果不加这一句,导出的 CSV 文件中可能会多出一列无意义的索引变量。
八、完整代码汇总
import pandas as pd# 读取CSV文件df = pd.read_csv( r"E:\LSTKINFO_1.csv", low_memory=False, encoding='UTF-8')# 查看数据基本信息df.info()# 可选择:列标签更名df.rename(columns={ "StkCd": "stkcd"}, inplace=True)# 转换日期格式:保留年-月df['LstDt'] = pd.to_datetime(df['LstDt']).dt.strftime('%Y-%m')# 验证转换结果print(df.head())# 保存到新文件df.to_csv( r"E:\桌面\上市日期.csv", index=False)
九、需要注意的问题
虽然这段代码很简单,但实际使用时仍然需要注意几个细节。
第一,日期列名称要和原始数据保持一致。本文使用的是:
如果你的数据中日期列叫做 date、month、Trddt 或其他名称,需要将代码中的列名对应修改。
第二,原始日期必须能够被 pd.to_datetime() 正确识别。如果原始日期中包含异常字符、中文日期、空值,可能需要先进行清洗。
第三,转换后的 LstDt 会变成字符串格式。如果后续只是用于合并、分组或导出,一般没有问题;但如果后续还要进行时间序列计算,可能需要保留为日期格式或转换成月度时间类型。
本文介绍了一个非常基础但实用的数据处理技巧:如何用 Python 提取日期中的“年-月”信息。
核心代码只有一行:
df['LstDt'] = pd.to_datetime(df['LstDt']).dt.strftime('%Y-%m')
它可以帮助我们快速将完整日期转换为月度格式,为后续的数据合并、月度匹配和实证分析打好基础。
在金融数据处理中,很多复杂分析的第一步,其实都是这些看似简单的数据清洗操作。只有把日期、变量名和数据格式处理规范,后续的回归、预测和匹配才会更加顺利。