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

如何将Python字典的值转换为合并后的pandas DataFrame行列数据

错误原因
  • 你存入字典dicts的not_outliers是numpy数组,不含列名信息,且pd.concat无法直接拼接numpy数组
  • 你把dicts的初始化放在了循环内部,每次循环都会清空之前存入的内容,最终字典里只会保留最后一次循环的键值对
  • 你在循环内修改了全局data变量,第一次循环后data就只剩第一个model的筛选结果,后续循环无法获取其他model的数据
  • 调用pd.DataFrame(list(dicts.values()))时,传入的是三维结构(每个value是二维数组,套一层列表就变成三维),不符合DataFrame的输入要求,所以触发维度错误
修正后的完整代码
import pandas as pd
import numpy as np

# 字典初始化移到循环外
dicts = {}
# 提前提取所有唯一model值,避免后续修改data导致取值错误
model_list = data['model'].unique().copy()

for ph in model_list:
    # 每次循环用临时变量存储当前model的筛选数据,不修改全局data
    ph_data = data[data['model'] == ph]
    feature_arr = ph_data[['r_var', 'b_var']].values
    probs = gmm.score_samples(feature_arr)
    
    probs_mean, probs_sd = np.mean(probs), np.std(probs)
    cut_off = probs_sd * 2
    lower, upper = probs_mean - cut_off, probs_mean + cut_off
    # 直接筛选非异常值的原始行数据,保留SPAD、model列信息
    not_outliers = ph_data[probs > lower]
    dicts[ph] = not_outliers

# 所有数据处理完成后统一合并,重置索引
df = pd.concat(dicts.values(), ignore_index=True)
# 调整列名符合要求
df.columns = ['w', 'x', 'y', 'z']
print(df)
补充说明

如果你只需要保留指定四列,可在合并后加如下代码过滤:

df = df[['r_var', 'b_var', 'SPAD', 'model']]
df.columns = ['w', 'x', 'y', 'z']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:09:03