如何将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
相关产品推荐
相关产品推荐

