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

如何用Pandas将Numpy时序数组转为含嵌套values与日期格式的JSON?

问题描述

我有一个shape为(10,2)的Numpy数组:

data = np.ones((10,2))

希望生成如下格式的JSON字符串:

[{
 "times":"2022-11-10 00:00:00",
 "values": {
    "first": <第一行值>,
    "second": <第二行值>
 }
}]

目前已编写代码:

dft = pd.DataFrame(data,columns=["first","second"],
                   index=pd.date_range(start_date, periods=len(data), freq=f"15T")
            )
dft.reset_index(inplace=True)
dft = dft.rename(columns={'index': 'times'})
out = dft.to_json(orient='records')

但得到的JSON结果日期是时间戳格式,且没有values嵌套字段:

[{"times":1357041600000,"first":0.0,"second":0.0},{"times":1357042500000,"first":0.0,"second":0.0},{"times":1357043400000,"first":0.0,"second":0.0},{"times":1357044300000,"first":0.0,"second":0.0},{"times":1357045200000,"first":0.0,"second":0.0},{"times":1357046100000,"first":0.0,"second":0.0},{"times":1357047000000,"first":0.0,"second":0.0},{"times":1357047900000,"first":0.0,"second":0.0},{"times":1357048800000,"first":0.0,"second":0.0},{"times":1357049700000,"first":0.0,"second":0.0}]

需要实现两个需求:

  1. 添加符合规范的"values"字段,将first和second嵌套进去
  2. 将times列转换为YYYY-MM-DD HH:MM:SS格式的日期字符串

解决方案

方法一:基于Pandas DataFrame处理

import numpy as np
import pandas as pd

data = np.ones((10,2))
start_date = "2022-11-10 00:00:00"

# 构造初始DataFrame
dft = pd.DataFrame(data, columns=["first","second"],
                   index=pd.date_range(start_date, periods=len(data), freq="15T")
            )
dft.reset_index(inplace=True)
dft = dft.rename(columns={'index': 'times'})

# 1. 将times列转为指定格式的字符串
dft['times'] = dft['times'].dt.strftime('%Y-%m-%d %H:%M:%S')

# 2. 构造嵌套的values字段
dft['values'] = dft.apply(lambda row: {'first': row['first'], 'second': row['second']}, axis=1)

# 只保留需要的列,转换为格式化的JSON
out = dft[['times', 'values']].to_json(orient='records', indent=2)

print(out)

方法二:字典推导式(高效处理大数据量)

如果数据量较大,避免使用apply,直接用原生Python构造结果:

import numpy as np
import pandas as pd
import json

data = np.ones((10,2))
start_date = "2022-11-10 00:00:00"

# 生成格式化的日期列表
dates = pd.date_range(start_date, periods=len(data), freq="15T").strftime('%Y-%m-%d %H:%M:%S')

# 构造目标结构的列表
result = [
    {
        "times": date,
        "values": {"first": row[0], "second": row[1]}
    }
    for date, row in zip(dates, data)
]

# 转换为JSON字符串
out = json.dumps(result, indent=2)
print(out)

最终输出示例

[
  {
    "times": "2022-11-10 00:00:00",
    "values": {
      "first": 1.0,
      "second": 1.0
    }
  },
  {
    "times": "2022-11-10 00:15:00",
    "values": {
      "first": 1.0,
      "second": 1.0
    }
  }
  // 剩余8条数据格式同上
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:40:42