如何将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
相关产品推荐
相关产品推荐

