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

如何用Python/Pandas从空格分隔.dat文件提取日期时间

解决pandas合并前6列为日期时间的问题

没问题,我来帮你搞定这个日期时间合并的事儿!既然已经成功导入并分隔了.dat文件,那把前6列(年、月、日、时、分、秒)转成datetime格式其实很简单,这里给你两种实用的方法:

方法1:直接用pd.to_datetime处理列组合

这是最简洁的方式,pandas的pd.to_datetime()可以直接接收包含日期时间各分量的DataFrame切片,自动帮你合并成datetime类型:

# 假设你的DataFrame名为df,前6列有明确的列名(比如year, month, day, hour, minute, second)
df['datetime'] = pd.to_datetime(df[['year', 'month', 'day', 'hour', 'minute', 'second']])

# 如果导入后列名是默认的数字索引(0到5),就用iloc切片
df['datetime'] = pd.to_datetime(df.iloc[:, :6])

这种方法会自动识别各分量的含义,不需要手动拼接字符串,非常省心。

方法2:先拼接字符串再转datetime(适合格式特殊的情况)

如果你的某些列格式不太规范(比如月份是1位数字、或者是字符串类型),可以先把各列拼接成标准的日期时间字符串,再转成datetime类型:

# 把各列转成字符串,并用str.zfill(2)保证两位数(比如1变成01)
df['datetime_str'] = (
    df['year'].astype(str) + '-'
    + df['month'].astype(str).str.zfill(2) + '-'
    + df['day'].astype(str).str.zfill(2) + ' '
    + df['hour'].astype(str).str.zfill(2) + ':'
    + df['minute'].astype(str).str.zfill(2) + ':'
    + df['second'].astype(str).str.zfill(2)
)

# 把字符串转成datetime类型
df['datetime'] = pd.to_datetime(df['datetime_str'])

# 不需要中间字符串列的话可以删掉
df = df.drop('datetime_str', axis=1)

一些额外的小提示

  • 确保前6列的数值是有效的日期时间分量(比如月份在1-12之间,日期在对应月份的范围内),否则pd.to_datetime()会抛出错误,你可以加errors='coerce'参数把无效值转成NaT(缺失的时间值):
    df['datetime'] = pd.to_datetime(df.iloc[:, :6], errors='coerce')
    
  • 如果后续要做时间序列分析,可以把新生成的datetime列设为DataFrame的索引:
    df = df.set_index('datetime')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:16:56