Python复杂字典保存为Excel时数值被替换为...该如何解决
问题原因
你观察到的...并非数值丢失,而是两个显示截断逻辑导致的:
- numpy数组默认设置了打印长度阈值,元素数量超过阈值后会自动用
...省略中间内容 - 你直接将高维numpy数组作为元素存入DataFrame单元格,导出Excel时pandas会调用数组的默认字符串表示,因此会带上截断符号。
修复方案
方案1:数组展开为独立单元格存储(推荐)
将高维数组的每个数值单独存入Excel单元格,方便后续读取、计算处理,示例代码如下:
import pandas as pd import numpy as np attention_relevance = model.get_attention(test) attentionres = [] for key in attention_relevance.keys(): # 可根据需求调整维度处理逻辑,这里以三维数组展平为一维为例 flatten_arr = attention_relevance[key].flatten() # 首列存字典key,方便后续对应数据来源,不需要可以删除 row_data = [key] + flatten_arr.tolist() attentionres.append(row_data) # 自定义列名,不需要key的话对应调整列名规则即可 col_list = ["data_key"] + [f"val_{i}" for i in range(len(attentionres[0]) - 1)] dfattention = pd.DataFrame(attentionres, columns=col_list) dfattention.to_excel(r'/savepath/attention.xlsx', index=False)
方案2:完整数组字符串存入单个单元格
如果你需要保留数组的原始结构形式,存在单个单元格中,可修改numpy打印配置关闭截断:
import pandas as pd import numpy as np # 全局关闭numpy数组打印截断,无限制打印长度与行宽 np.set_printoptions(threshold=np.inf, linewidth=np.inf) attention_relevance = model.get_attention(test) attentionres = [] for key in attention_relevance.keys(): # 手动将数组转为完整字符串,可自定义分隔符 full_arr_str = np.array2string(attention_relevance[key], separator=' ') attentionres.append({"key": key, "attention_value": full_arr_str}) dfattention = pd.DataFrame(attentionres) dfattention.to_excel(r'/savepath/attention.xlsx', index=False)
内容的提问来源于stack exchange,提问作者Hinnerk8
相关产品推荐
相关产品推荐

