Pandas如何将嵌套字典的time列转换为日-月-年格式日期
实现方案
你可以根据自己的使用场景选以下任意一种方式实现,都能得到你要的日-月-年格式time列:
方法1:apply逐行拼接(代码最短、逻辑最直观)
不需要额外处理,直接对存储字典的time列做映射,逐行取出年、月、日字段拼接即可,仅需1行代码:
candleData['time'] = candleData['time'].apply(lambda item: f"{item['day']}-{item['month']}-{item['year']}")
执行完直接覆盖原time列,输出结果和你预期完全一致。
方法2:先展开嵌套列再拼接(适合后续需要单独操作日月年字段的场景)
如果你之后需要按日、月单独筛选或计算数据,可以先把嵌套字典拆成独立列,再拼接成目标格式:
# 将time列的字典拆分为day、month、year三个独立列 candleData[['day', 'month', 'year']] = candleData['time'].apply(pd.Series) # 拼接为目标格式的字符串 candleData['time'] = candleData['day'].astype(str) + '-' + candleData['month'].astype(str) + '-' + candleData['year'].astype(str) # 不需要保留单独日月年列的话直接删除即可 candleData.drop(columns=['day', 'month', 'year'], inplace=True)
方法3:读取JSON阶段直接展平(适合大数据量场景,运行效率最高)
你可以在最开始解析JSON的时候就把嵌套结构扁平化,避免先生成字典列再二次处理,替换你原本创建DataFrame的代码即可:
import pandas as pd from pandas import json_normalize # 解析原始JSON数据 raw_data = json.loads(request.GET.get('candleData')) # 自动展平嵌套结构,time字段会被拆为time.day、time.month、time.year三列 candleData = json_normalize(raw_data) # 拼接成目标日期格式 candleData['time'] = candleData['time.day'].astype(str) + '-' + candleData['time.month'].astype(str) + '-' + candleData['time.year'].astype(str) # 保留需要的字段,删除展开产生的多余列 candleData = candleData[['open', 'high', 'low', 'close', 'time']]
*补充提示:如果后续需要做时间序列相关计算(比如按周/月聚合、计算时间差),不建议把time列存为字符串,可直接转换为pandas内置的datetime类型,转换代码为:
candleData['time'] = pd.to_datetime(candleData['time'].apply(lambda x: {k:v for k,v in x.items()}) )
转换后可以直接使用pandas所有时间序列相关的API,计算效率更高。*
内容的提问来源于stack exchange,提问作者SaFteiNZz
相关产品推荐
相关产品推荐

