You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame的日期列与到期日行转为datetime类型?

解决方案

1. 转换Date列与到期日行至datetime类型

根据你的DataFrame结构(首行是债券名称,最左列是Date,索引0行为到期日),可以按以下步骤同时转换两类日期:

处理到期日行(索引0行)

提取到期日所在行(排除Date列,因为该列首行是"Maturity Date"字符串),将其转换为datetime类型:

import pandas as pd

# 提取到期日数据并转换为datetime
maturity_dates = test.iloc[0, 1:].apply(pd.to_datetime)

处理Date列

将Date列中除首行外的实际日期转换为datetime类型,同时保留首行的"Maturity Date"标识:

# 转换Date列的实际日期(跳过首行)
test.loc[1:, 'Date'] = pd.to_datetime(test.loc[1:, 'Date'])
# 若直接转换整列导致首行变成NaT,可手动恢复标识
# test.loc[0, 'Date'] = "Maturity Date"

2. 计算债券存续期

利用转换后的到期日与Date列日期相减,得到各日期下的债券剩余存续时间(结果为Timedelta类型,可按需转换为天数/月数):

方法1:新增列存储存续期

遍历每个债券列,计算并新增对应存续期列:

for bond_col in test.columns[1:]:
    # 计算存续期:到期日 - 当前日期
    test.loc[1:, f'{bond_col}_remaining'] = maturity_dates[bond_col] - test.loc[1:, 'Date']

方法2:批量生成存续期DataFrame

通过广播运算批量计算,效率更高(适合数据量较大的场景):

# 提取有效日期序列
date_series = test.loc[1:, 'Date'].reset_index(drop=True)
# 广播计算所有债券的存续期
remaining_periods = maturity_dates - date_series[:, None]
# 转换为DataFrame并添加到原表
remaining_df = pd.DataFrame(
    remaining_periods.values,
    columns=[f'{col}_remaining' for col in maturity_dates.index],
    index=test.loc[1:].index
)
test = pd.concat([test, remaining_df], axis=1)

补充说明

  • 如果到期日行包含无效日期字符串,可在pd.to_datetime中添加errors='coerce'参数,将无效值转为NaT,避免报错。
  • 若需要将存续期转换为天数,可对结果调用.dt.days属性,例如test[f'{bond_col}_remaining'].dt.days。

内容的提问来源于stack exchange,提问作者Jannjann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:22:32