如何将嵌套JSON转为Pandas DataFrame并移除内部列表重复值
解决嵌套JSON转Pandas DataFrame并移除values列表重复值的问题
核心思路
先对每个JSON条目内的values列表做去重处理,再转换为DataFrame。根据你的需求,去重规则是保留每个子列表的唯一实例(首次出现的条目优先)。
假设原始JSON结构
先模拟符合你需求的输入数据:
raw_json = [ { "key": "metric_a", "values": [ [1435781430.781, "1"], [1435781430.781, "1"], # 重复条目 [1435781450.781, "1"] # 额外重复示例 ] }, { "key": "metric_b", "values": [ [1435781430.781, "0"], [1435781430.781, "0"], # 重复条目 [1435781460.781, "1"] ] } ]
方案1:保留嵌套结构的去重
如果需要保留原有的嵌套values列表结构,用以下代码处理:
import pandas as pd processed_data = [] for entry in raw_json: # 将子列表转成可哈希的元组,用dict.fromkeys去重(保留首次出现的条目) unique_tuples = list(dict.fromkeys(tuple(v) for v in entry["values"])) # 转回列表格式 unique_values = [list(t) for t in unique_tuples] processed_data.append({ "key": entry["key"], "values": unique_values }) # 转换为DataFrame df = pd.DataFrame(processed_data) print(df)
运行后,第一个values列表仅保留[1435781430.781, "1"],第二个列表保留指定的两个唯一条目。
方案2:扁平化结构的去重(更适合数据分析)
如果需要将values展开为DataFrame的行,方便后续分析,用以下代码:
import pandas as pd flattened_data = [] for entry in raw_json: metric_key = entry["key"] # 先对当前指标的values去重 unique_tuples = list(dict.fromkeys(tuple(v) for v in entry["values"])) for timestamp, value in unique_tuples: flattened_data.append({ "metric": metric_key, "timestamp": timestamp, "value": value }) # 转换为DataFrame df = pd.DataFrame(flattened_data) print(df)
最终得到的DataFrame每行对应一个唯一的时间戳-值组合,结构更清晰。
内容的提问来源于stack exchange,提问作者ZN K
相关产品推荐
相关产品推荐

