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

如何使用Pandas展开asks与bids列并设置前缀?

使用Pandas展开嵌套字典列表列并添加前缀

这是个很常见的嵌套数据处理需求,结合Pandas的explode和json_normalize工具就能完美解决,同时还能自动处理数据数量不一致时的NaN填充问题。下面是针对你需求的具体实现步骤:

步骤1:导入依赖并准备数据

首先确保你已经导入了Pandas,假设你的原始DataFrame命名为df:

import pandas as pd

# 这里用你提供的示例数据片段初始化df(如果已有数据可跳过)
data = {
    'time': {0: '2022-05-07T00:00:00.000000000Z',
             1: '2022-05-07T01:00:00.000000000Z',
             2: '2022-05-07T02:00:00.000000000Z',
             3: '2022-05-07T03:00:00.000000000Z',
             4: '2022-05-07T04:00:00.000000000Z'},
    'asks': {0: [{'price': '0.9999', 'size': '4220492'},
                 {'price': '1', 'size': '2556759'},
                 {'price': '1.0001', 'size': '941039'},
                 {'price': '1.0002', 'size': '458602'},
                 {'price': '1.0003', 'size': '257955'}],
             # 其他行的asks/bids数据可补充在此处
             },
    'bids': {0: [{'price': '1.0', 'size': '23142'}, {'price': '0.99', 'size': '6436'}],
             # 其他行的bids数据可补充在此处
             }
}
df = pd.DataFrame(data)

步骤2:分别处理asks和bids列

我们需要把每个列里的字典列表拆分成单独行,再将字典展开为带前缀的列:

# 处理asks列:拆分行 + 展开字典 + 添加前缀
asks_processed = df.explode('asks').reset_index(drop=True)
asks_processed = pd.concat(
    [asks_processed[['time']], 
     pd.json_normalize(asks_processed['asks']).add_prefix('asks_')],
    axis=1
)

# 处理bids列:同样的逻辑
bids_processed = df.explode('bids').reset_index(drop=True)
bids_processed = pd.concat(
    [bids_processed[['time']], 
     pd.json_normalize(bids_processed['bids']).add_prefix('bids_')],
    axis=1
)

这里的关键函数说明:

  • explode('asks'):将每个单元格中的列表拆分为单独的行,原始的time值会自动重复对应每个列表元素
  • pd.json_normalize():把字典格式的数据展开为标准的列结构
  • add_prefix():给展开后的列名添加前缀,避免price/size列名冲突

步骤3:合并结果并处理缺失值

由于同一时间下asks和bids的元素数量可能不一致(比如你示例中最后一行只有1个bids项),我们需要用外连接来合并两个处理后的DataFrame,自动填充缺失值为NaN:

# 按time进行外连接,保留所有行
final_result = pd.merge(asks_processed, bids_processed, on='time', how='outer')

# 按时间排序,保证结果顺序和原始数据一致
final_result = final_result.sort_values('time').reset_index(drop=True)

最终效果

运行上述代码后,你就能得到和示例完全一致的结果:

  • 每个字典的price和size分别变成asks_price/asks_size、bids_price/bids_size
  • 同一时间下的所有asks和bids项都会对应展示
  • 数据数量不匹配时,缺失的字段会自动填充为NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:45:28