当前位置:首页>python>一行代码提取“年-月”:Python 日期处理的简单实用版

一行代码提取“年-月”:Python 日期处理的简单实用版

  • 2026-10-11 07:51:25
一行代码提取“年-月”:Python 日期处理的简单实用版

在做金融数据、企业数据或面板数据处理时,我们经常会遇到一个非常基础但高频的问题:

原始数据里的日期是完整日期,比如 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 文件。

其中:

low_memory=False

可以减少读取大文件时出现的数据类型警告。

encoding='UTF-8'

表示使用 UTF-8 编码读取文件。如果读取中文数据时出现乱码,可以检查文件编码是否与这里一致。

三、查看数据基本信息

读取数据之后,可以先查看数据结构:

df.info()

这一步主要是为了确认:

  • 数据有多少行、多少列;
  • 每一列的变量名是什么;
  • 日期变量是否存在;
  • 每一列的数据类型是什么;
  • 是否存在缺失值。

在正式修改数据之前,先查看数据结构是一个很好的习惯。

四、变量名统一处理

在原始数据中,股票代码变量名可能是:

StkCd

为了后续处理更加方便,可以将其统一改成小写形式:

df.rename(columns={    "StkCd": "stkcd"}, inplace=True)df.head()

这里使用的是 rename() 函数。

其中:

columns={    "StkCd": "stkcd"}

表示将原来的 StkCd 改名为 stkcd。

inplace=True

表示直接在原数据 df 上进行修改。

变量名统一后,后续进行数据合并、筛选、建模时会更加清晰,也能减少因为大小写不一致导致的报错。

五、提取日期中的“年-月”

本文最核心的代码是下面这一行:

df['LstDt'] = pd.to_datetime(df['LstDt']).dt.strftime('%Y-%m')

这行代码的作用是:

将 LstDt 这一列转换为日期格式,并只保留其中的年份和月份。

可以拆成两步理解。

第一步:

pd.to_datetime(df['LstDt'])

这一步将 LstDt 转换为 Python 可以识别的日期格式。

第二步:

.dt.strftime('%Y-%m')

这一步将日期重新格式化,只保留:

年-月

例如:

原始日期
转换后
2001-06-18
2001-06
2010-12-31
2010-12
2023-01-05
2023-01

其中:

%Y

表示四位数年份,例如 2020。

%m

表示两位数月份,例如 03、11。

因此:

'%Y-%m'

就表示将日期转换成 2020-03 这样的年月格式。

六、检查转换结果

日期转换完成之后,可以查看前几行结果:

print(df.head())

这一步非常重要。

因为日期格式处理看似简单,但如果原始数据中存在异常值、空值或格式不统一的日期,就可能导致转换失败或出现缺失。

所以每次完成日期转换后,都建议检查一下结果是否符合预期。

七、保存处理后的数据

最后,可以将处理后的数据保存为新的 CSV 文件:

df.to_csv(    r"E:\桌面\上市日期.csv",    index=False)

这里的:

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)

九、需要注意的问题

虽然这段代码很简单,但实际使用时仍然需要注意几个细节。

第一,日期列名称要和原始数据保持一致。本文使用的是:

LstDt

如果你的数据中日期列叫做 date、month、Trddt 或其他名称,需要将代码中的列名对应修改。

第二,原始日期必须能够被 pd.to_datetime() 正确识别。如果原始日期中包含异常字符、中文日期、空值,可能需要先进行清洗。

第三,转换后的 LstDt 会变成字符串格式。如果后续只是用于合并、分组或导出,一般没有问题;但如果后续还要进行时间序列计算,可能需要保留为日期格式或转换成月度时间类型。

本文介绍了一个非常基础但实用的数据处理技巧:如何用 Python 提取日期中的“年-月”信息。

核心代码只有一行:

df['LstDt'] = pd.to_datetime(df['LstDt']).dt.strftime('%Y-%m')

它可以帮助我们快速将完整日期转换为月度格式,为后续的数据合并、月度匹配和实证分析打好基础。

在金融数据处理中,很多复杂分析的第一步,其实都是这些看似简单的数据清洗操作。只有把日期、变量名和数据格式处理规范,后续的回归、预测和匹配才会更加顺利。

最新文章

随机文章