Python用read_excel读取含numpy ndarray的Excel列元素异常求助
问题原因
Excel不支持存储numpy数组类型,当你把包含ndarray的DataFrame写入Excel时,pandas会自动将数组转换为字符串格式(比如[1.2, 3.4, ...]),读回后该列实际是字符串类型,而非numpy数组,所以访问[0][0]时取到的是字符串的第一个字符"["。
解决方法
方法1:读取后将字符串转换为numpy数组
通过apply函数处理每一行的字符串,将其还原为numpy数组:
import numpy as np import pandas as pd # 读取Excel文件 s = path_territory_output + '\\COM_DETAIL.xlsx' COM_DETAIL = pd.read_excel(s) # 定义字符串转数组的函数 def str_to_ndarray(s): # 去除字符串首尾的[],按逗号分割元素 element_strs = s.strip('[]').split(',') # 清理空格并转换为数值类型(根据你的数据类型选择float/int) elements = [float(e.strip()) for e in element_strs if e.strip()] return np.array(elements) # 将目标列转换为numpy数组 COM_DETAIL['COM_CLOSEST'] = COM_DETAIL['COM_CLOSEST'].apply(str_to_ndarray) # 现在可以正常访问数组元素 print(COM_DETAIL['COM_CLOSEST'][0][0])
方法2:改用pickle/Parquet等格式存储(推荐)
如果不需要用Excel打开文件,建议使用支持保留Python数据类型的存储格式,避免转换步骤:
存储时用pickle:
# 生成DataFrame后直接保存为pickle格式 COM_DETAIL.to_pickle(path_territory_output + '\\COM_DETAIL.pkl')
读取时:
# 直接读取pickle文件,保留原数据类型 COM_DETAIL = pd.read_pickle(path_territory_output + '\\COM_DETAIL.pkl') # 直接访问数组元素即可 print(COM_DETAIL['COM_CLOSEST'][0][0])
内容的提问来源于stack exchange,提问作者user19725009
相关产品推荐
相关产品推荐

