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

如何将ohlc嵌套列表中的日期字符串转换为(年,月,日)元组?

嘿,这个需求我之前也碰到过,给你分享几种实用的实现方式,按需选就行:

1. 最简洁的列表推导式写法

这种方式一行核心逻辑搞定,Pythonic十足:

ohlc = [['2018-04-09', 7044.32, 7178.11, 6661.99, 6770.73], 
        ['2018-04-08', 6919.98, 7111.56, 6919.98, 7023.52],
        # 其他子列表...
       ]

ohlc_converted = [
    (tuple(map(int, date.split('-'))), *rest) 
    for date, *rest in ohlc
]

原理很简单:用date, *rest把每个子列表的日期和后续数值拆分开,date.split('-')把字符串按-切成三段,再转成整数后打包成元组,最后和后面的数值部分组合成新的元素。

2. 直观的for循环写法(适合新手理解)

如果刚接触Python,循环的方式更容易看懂和调试:

ohlc_converted = []
for item in ohlc:
    # 取出日期字符串
    date_str = item[0]
    # 拆分并转成整数元组
    date_tuple = tuple(int(part) for part in date_str.split('-'))
    # 替换原日期部分,生成新的子列表
    new_item = [date_tuple] + item[1:]
    ohlc_converted.append(new_item)

一步步遍历每个子列表,处理完日期后替换掉原来的字符串,再加入新列表。

3. 更健壮的datetime模块写法

如果担心日期格式可能有变化(比如后续遇到非YYYY-MM-DD的格式),用datetime模块解析会更稳妥:

from datetime import datetime

ohlc_converted = []
for item in ohlc:
    date_str = item[0]
    # 按指定格式解析日期字符串
    date_obj = datetime.strptime(date_str, '%Y-%m-%d')
    # 提取年、月、日组成元组
    date_tuple = (date_obj.year, date_obj.month, date_obj.day)
    new_item = [date_tuple] + item[1:]
    ohlc_converted.append(new_item)

这种方式能应对更多日期格式场景,只要调整strptime的格式参数就行,比手动拆分更不容易出错。

额外小技巧:如果是从Pandas DataFrame来的

既然你提到了df.values.tolist(),其实可以直接在DataFrame层面处理日期,再转列表:

import pandas as pd

# 假设df是你的原始DataFrame,第一列是日期
df['date_tuple'] = df.iloc[:,0].apply(lambda x: tuple(map(int, x.split('-'))))
# 替换原日期列后转成嵌套列表
ohlc_converted = df.drop(df.columns[0], axis=1)[['date_tuple'] + list(df.columns[:-1])].values.tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:42:02