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

如何调整pandas DataFrame结构 将列转换为值生成datetime与数值列

处理思路
  • 第一步:原始数据结构探查
    先执行基础命令定位数据特征,无需提前知道原始结构:
    • 执行df.info()查看所有列的字段类型、非空值占比
    • 执行df.head(10)查看前10行的实际数据存储格式
    • 执行df.columns.tolist()输出全量列名,定位疑似时间字段和数值字段的位置
  • 第二步:时间字段转换为标准datetime格式
    根据你定位到的时间字段存储格式,对应转换:
    • 字符串格式时间:使用pd.to_datetime(df['原时间列名'], format='匹配的时间格式', errors='coerce'),errors='coerce'会自动把无法解析的异常值转为NaT,方便后续过滤
    • 数值型时间戳:额外指定单位参数,秒级时间戳加unit='s',毫秒级加unit='ms'
    • 分栏存储的时间(年/月/日/时分分别存在不同列):直接传入多列合并转换pd.to_datetime(df[['年列','月列','日列','时列']])
      转换完成后将该列命名为datetime存入DataFrame即可。
  • 第三步:提取目标数值列并调整结构
    按需筛选、调整表结构即可:
    • 只需保留指定数值列:直接做列筛选 result_df = df[['datetime', '数值列1', '数值列2', ...]]
    • 时间原存储在索引中:先执行df = df.reset_index(names='datetime')把索引转为普通列再筛选
    • 原数据为宽表需要转长表:用pd.melt(df, id_vars='datetime')将所有非时间列转为“变量名+数值”的长结构
    • 原数据为长表需要转宽表:用pd.pivot(df, index='datetime', columns='分类列', values='数值列')生成指定维度的宽表
  • 第四步:异常值清洗
    最后过滤掉时间列异常的行:result_df = result_df.dropna(subset=['datetime']),也可以根据业务需要对数值列做空值填充、异常值过滤操作。

参考示例代码

import pandas as pd

# 示例场景:原始数据的ts列是毫秒级时间戳,需要保留value、count两个数值列
df['datetime'] = pd.to_datetime(df['ts'], unit='ms', errors='coerce')
result_df = df[['datetime', 'value', 'count']].dropna(subset=['datetime'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:15:04