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

Python嵌套字典会话数据处理:错误在会话阶段分布分析求助

会话错误时间分布分析与嵌套JSON解析问题

问题背景

现有包含多会话的嵌套字典数据,每个会话含起止时间,会话桶内有带时间戳的结果(分错误/非错误类型),目标是分析错误更常出现在会话前半段还是后半段。当前使用pd.json_normalize仅能解析第一层buckets,尝试直接访问SessionTimestamps时触发错误:list indices must be integers or slices, not str,同时不清楚如何遍历处理每个会话数据。

报错原因

resp["aggregations"]["Sessioncount"]["buckets"]是列表对象(每个元素对应一个会话的字典数据),而非单个字典。直接用字符串["SessionTimestamps"]索引列表会触发类型错误,必须先遍历列表中的每个会话项,再访问其内部的SessionTimestamps字段。

解决实现

1. 解析嵌套JSON数据

遍历会话列表,提取每个会话的ID、错误类型、时间戳等核心数据,转换为结构化DataFrame:

import pandas as pd

# 假设resp为原始字典数据
sessions_data = []
# 遍历每个会话桶
for session in resp["aggregations"]["Sessioncount"]["buckets"]:
    session_id = session["key"]
    # 提取当前会话下的所有时间戳条目
    timestamp_buckets = session["SessionTimestamps"]["buckets"]
    for ts_item in timestamp_buckets:
        # 从key数组中拆分错误类型和时间戳
        error_type = ts_item["key"][0]
        timestamp = ts_item["key"][1]
        sessions_data.append({
            "session_id": session_id,
            "error_type": error_type,
            "timestamp": timestamp,
            "doc_count": ts_item["doc_count"]
        })

# 转换为DataFrame并处理时间戳格式
df = pd.DataFrame(sessions_data)
df["timestamp"] = pd.to_datetime(df["timestamp"])

2. 分析错误时间分布

计算每个会话的时间中点,判断错误结果属于前半段还是后半段,最终统计分布:

# 按会话分组,计算每个会话的起止时间和时间中点
session_time_stats = df.groupby("session_id").agg(
    start_time=("timestamp", "min"),
    end_time=("timestamp", "max")
).reset_index()
session_time_stats["mid_time"] = session_time_stats["start_time"] + (session_time_stats["end_time"] - session_time_stats["start_time"]) / 2

# 合并时间统计数据,标记每个结果的时间段
df_analysis = df.merge(session_time_stats, on="session_id")
df_analysis["time_segment"] = df_analysis.apply(
    lambda row: "前半段" if row["timestamp"] <= row["mid_time"] else "后半段",
    axis=1
)

# 统计错误的分布(这里以error_type不为"None"作为错误判断依据)
error_distribution = df_analysis[df_analysis["error_type"] != "None"].groupby("time_segment")["doc_count"].sum().reset_index()
print(error_distribution)

关键说明

  • 必须遍历会话列表而非直接索引:解决list indices类型错误的核心是先处理列表中的每个会话字典,再访问内部嵌套字段
  • 时间戳格式转换:将字符串时间转为datetime类型,才能进行时长和中点的计算
  • 分段判断逻辑:以会话时长的中点为分界,区分每个结果所属的时间段,最终统计错误的分布情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:40:44