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

如何将CSV中多列时间字段转换为标准Datetime列?

问题

我需要把CSV文件中的时间列(Year、Julian day、Hour/minut(UTC)、Second)合并成单个Datetime列,格式要求为「14/11/2017 00:16:00」。目前用pandas读取数据,但Hour/minut (UTC)列存在格式问题:0-9点的小时数只有一位(比如0点16分表示为016,9点直接显示为9而非09),请问怎么生成正确的Datetime数组?

附当前代码:

cols = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
D14 = pd.read_csv(r'C:\Users\William Jacondino\Desktop\DadosTimeSeries\PIRATA-PROFILE\Dados FLUXO\Dados_brutos_copy-20220804T151840Z-002\Dados_brutos_copy\tm_data_2017_11_14_0016.dat', header=None, usecols=cols, names=["Year","Julian day", "Hour/minut (UTC)", "Second", "Bateria (V)", "PTemp (°C)", "Latitude", "Longitude", "Magnectic_Variation (arb)", "Altitude (m)", "Course (º)", "WS", "Nmbr_of_Satellites (arb)", "RAD", "Tar", "UR", "slp",], sep=',')
D14 = D14.loc[:, ["Year","Julian day", "Hour/minut (UTC)", "Second", "Latitude", "Longitude","WS", "RAD", "Tar", "UR", "slp"]]
解决方案

可通过以下步骤处理格式问题并生成标准Datetime列:

  1. 统一Hour/minut (UTC)列格式
    将该列转为字符串后,用str.zfill(4)补前导零,确保所有值为4位:比如"9"变成"0009","016"变成"0016",方便拆分小时和分钟。

  2. 拆分小时与分钟
    从补零后的字符串中提取前两位作为小时,后两位作为分钟。

  3. 合并时间组件并转换为Datetime
    结合Year、Julian day、提取出的小时/分钟、Second,转换为pandas的datetime对象,再格式化为指定字符串格式。

完整代码示例:

import pandas as pd

# 读取数据(保留原有读取逻辑)
cols = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
D14 = pd.read_csv(r'C:\Users\William Jacondino\Desktop\DadosTimeSeries\PIRATA-PROFILE\Dados FLUXO\Dados_brutos_copy-20220804T151840Z-002\Dados_brutos_copy\tm_data_2017_11_14_0016.dat', header=None, usecols=cols, names=["Year","Julian day", "Hour/minut (UTC)", "Second", "Bateria (V)", "PTemp (°C)", "Latitude", "Longitude", "Magnectic_Variation (arb)", "Altitude (m)", "Course (º)", "WS", "Nmbr_of_Satellites (arb)", "RAD", "Tar", "UR", "slp",], sep=',')
D14 = D14.loc[:, ["Year","Julian day", "Hour/minut (UTC)", "Second", "Latitude", "Longitude","WS", "RAD", "Tar", "UR", "slp"]]

# 处理Hour/minut (UTC)列
D14['time_str'] = D14['Hour/minut (UTC)'].astype(str).str.zfill(4)
D14['Hour'] = D14['time_str'].str[:2].astype(int)
D14['Minute'] = D14['time_str'].str[2:].astype(int)

# 合并为datetime对象
D14['Datetime'] = pd.to_datetime(
    D14['Year'].astype(str) + ' ' + 
    D14['Julian day'].astype(str).str.zfill(3) + ' ' + 
    D14['Hour'].astype(str).str.zfill(2) + ' ' + 
    D14['Minute'].astype(str).str.zfill(2) + ' ' + 
    D14['Second'].astype(str).str.zfill(2),
    format='%Y %j %H %M %S'
)

# 转换为指定显示格式(若需要字符串类型列可执行此步)
D14['Datetime_str'] = D14['Datetime'].dt.strftime('%d/%m/%Y %H:%M:%S')

# 删除中间辅助列
D14 = D14.drop(['time_str', 'Hour', 'Minute'], axis=1)

# 查看结果
print(D14[['Datetime', 'Datetime_str']].head())

代码说明

  • str.zfill(4):强制补全为4位字符串,解决小时数位数不足的问题;
  • pd.to_datetime配合%Y %j %H %M %S格式,直接将儒略日转换为标准日期;
  • dt.strftime('%d/%m/%Y %H:%M:%S'):将datetime对象转为要求的字符串格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:45:28