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

如何将Unix时间戳转换为字符串?以及仅使用Numpy实现10000×3数组的CSV保存

用纯Numpy实现数组转CSV并处理时间戳转换

没问题,我会帮你用纯Numpy完成这个任务,同时详细说明Unix时间戳转字符串的实现方式。

完整实现代码

import numpy as np
import time

# 1. 生成数组并正确赋值时间戳
arr = np.random.randn(10000, 3)
base_time = time.time()
# 给第一列赋值 time.time() + i,i从0到9999
arr[:, 0] = base_time + np.arange(arr.shape[0])

# 2. 将Unix时间戳转换为日期时间字符串
# 定义向量化函数,批量处理时间戳转字符串
timestamp_to_datetime = np.vectorize(
    lambda ts: time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(ts))
)
datetime_strs = timestamp_to_datetime(arr[:, 0])

# 3. 构建混合数据类型的结构化数组
# 因为普通Numpy数组只能有单一数据类型,所以用结构化数组来存储字符串+浮点
structured_arr = np.core.records.fromarrays(
    [datetime_strs, arr[:, 1], arr[:, 2]],
    dtype=[('datetime', 'U19'), ('col2', 'f8'), ('col3', 'f8')]
)

# 4. 保存为CSV文件
np.savetxt(
    'output.csv',
    structured_arr,
    fmt='%s,%.6f,%.6f',  # 指定每列的格式:字符串,浮点保留6位小数
    delimiter=',',
    header='datetime,col2,col3',  # 添加表头
    comments=''  # 去掉默认的#注释符
)

关键步骤详解

1. 正确生成时间戳序列

你原来的代码里arr[:,0] = time.time() + 1只会给所有行的第一列赋值同一个时间戳+1,这里我们用np.arange(arr.shape[0])生成0到9999的序列,加上基准时间,就能得到每行递增1秒的时间戳。

2. Unix时间戳转字符串的方法

要批量处理Numpy数组里的时间戳,最方便的是用np.vectorize()把普通的Python时间处理函数转换成能作用于整个数组的向量化函数:

  • time.localtime(ts):把Unix时间戳转换为本地时间的struct_time对象
  • time.strftime(format, struct_time):把struct_time格式化为指定的字符串(这里用%Y-%m-%d %H:%M:%S对应年-月-日 时:分:秒)
  • np.vectorize()让这个转换逻辑可以一次性作用于整个arr[:,0]数组,效率比Python循环高很多。

3. 处理混合数据类型

普通的Numpy ndarray只能存储单一数据类型,而我们需要第一列是字符串,后两列是浮点,所以用np.core.records.fromarrays()创建结构化数组:

  • 传入每列的数据列表
  • 指定dtype参数,定义每列的名称和数据类型:'U19'表示长度19的字符串(刚好匹配YYYY-MM-DD HH:MM:SS的长度),'f8'表示64位浮点数。

4. 保存CSV文件

用np.savetxt()保存时:

  • fmt参数指定每列的输出格式,%s对应字符串,%.6f对应保留6位小数的浮点数
  • header添加CSV表头,comments=''避免表头被加上#注释符
  • delimiter=','指定逗号作为分隔符,符合CSV格式要求

另一种更高效的时间转换方式(可选)

如果你的数据量很大,np.vectorize()本质还是循环,你可以用Numpy的datetime64类型来处理,效率更高:

# 用numpy原生datetime处理
datetime_arr = np.datetime64('1970-01-01') + arr[:,0].astype('timedelta64[s]')
datetime_strs = datetime_arr.astype('U19')

这种方式完全用Numpy原生操作,比vectorize更高效,结果和之前的方法一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:07:37