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

如何将Pandas DataFrame前三列合并转换为datetime列?

解决方案

步骤1:合并前三列并转换为datetime类型

假设你的DataFrame前三列默认列名为0、1、2,可以直接拼接这三列的字符串,再用pd.to_datetime()解析成标准时间格式:

import pandas as pd

# 你的现有代码
d = [line.rstrip() for line in open('ufw.txt').readlines()]
df = pd.DataFrame([i.split(" ") for i in d])

# 合并前三列为datetime列
df['timestamp'] = pd.to_datetime(
    df[0] + ' ' + df[1] + ' ' + df[2],
    format='%b %d %H:%M:%S'  # 匹配ufw日志的日期格式:月份缩写+日期+时分秒
)

步骤2:调整列结构(可选)

如果不需要保留原始的前三列,可以直接删除:

# 删除原始月份、日期、时间列
df = df.drop(columns=[0, 1, 2])

# 可选:将timestamp列移到DataFrame最前面
df = df[['timestamp'] + [col for col in df.columns if col != 'timestamp']]

补充:处理缺失年份的情况

ufw日志默认不记录年份,pd.to_datetime()会自动填充当前年份。如果需要指定固定年份(比如日志属于2023年),可以在拼接时补充年份信息:

df['timestamp'] = pd.to_datetime(
    df[0] + ' ' + df[1] + ' ' + df[2] + ' 2023',
    format='%b %d %H:%M:%S %Y'
)

更高效的日志读取方式(可选)

可以跳过手动列表转换的步骤,直接用pd.read_csv()读取日志文件,更简洁高效:

df = pd.read_csv(
    'ufw.txt',
    sep='\s+',  # 按任意数量的空格分隔字段
    header=None  # 日志无表头
)

# 同样生成datetime列
df['timestamp'] = pd.to_datetime(df[0] + ' ' + df[1] + ' ' + df[2], format='%b %d %H:%M:%S')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:38:15