如何用Python在Excel中读写含数组的嵌套列表?
问题
我尝试用Python将包含数组的嵌套列表写入Excel单元格,数据如下:
segData = ([0, [250. , 251. , 251.6, 252. , 252.2, 252.4, 253. , 253.4, 253.6, 253.8, 254.2, 254.6, 255.2, 256. , 256.8, 257.4, 257.8, 257.8, 257.6, 257.4, 257.2, 257.2, 257.4, 257.6, 257.8, 258. , 258.2, 258.4, 258.8], 0, 'active index.xlsm'])
使用以下代码写入Excel:
df = pd.DataFrame(segData) writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name='Segmented Data', index=False) writer.save()
写入成功,但读取时:
import pandas as pd import numpy as np data = pd.read_excel('test.xlsx', sheet_name='Segmented Data') data = data.to_numpy()
嵌套的数组被识别为字符串,无法进行索引操作。需要实现写入Excel后,仍能以数组形式读取并使用。
解决方案
方法1:JSON序列化存储数组
Excel本身不支持直接存储数组类型,可将数组转为JSON字符串写入,读取时再解析回数组。
写入代码
import pandas as pd import json segData = ([0, [250. , 251. , 251.6, 252. , 252.2, 252.4, 253. , 253.4, 253.6, 253.8, 254.2, 254.6, 255.2, 256. , 256.8, 257.4, 257.8, 257.8, 257.6, 257.4, 257.2, 257.2, 257.4, 257.6, 257.8, 258. , 258.2, 258.4, 258.8], 0, 'active index.xlsm']) # 将嵌套数组转为JSON字符串 processed_data = [ segData[0], json.dumps(segData[1]), segData[2], segData[3] ] # 构造DataFrame时套一层列表,确保单条记录占一行 df = pd.DataFrame([processed_data]) writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name='Segmented Data', index=False, header=False) writer.close()
读取代码
import pandas as pd import json import numpy as np # 读取时指定无表头 data = pd.read_excel('test.xlsx', sheet_name='Segmented Data', header=None) # 提取第一条记录 record = data.to_numpy()[0] # 将JSON字符串解析为numpy数组 record[1] = np.array(json.loads(record[1])) # 测试索引操作 print(record[1][0]) # 输出:250.0
方法2:拆分嵌套结构到多列
如果需要在Excel中直观查看数组内容,可将嵌套数组拆分为单独列存储,读取时再重组为数组。
写入代码
import pandas as pd segData = ([0, [250. , 251. , 251.6, 252. , 252.2, 252.4, 253. , 253.4, 253.6, 253.8, 254.2, 254.6, 255.2, 256. , 256.8, 257.4, 257.8, 257.8, 257.6, 257.4, 257.2, 257.2, 257.4, 257.6, 257.8, 258. , 258.2, 258.4, 258.8], 0, 'active index.xlsm']) # 构造包含固定字段和数组拆分字段的字典 df_dict = { 'id': [segData[0]], 'flag': [segData[2]], 'file_name': [segData[3]] } # 为数组每个元素创建单独列 for idx, value in enumerate(segData[1]): df_dict[f'arr_{idx}'] = [value] df = pd.DataFrame(df_dict) writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name='Segmented Data', index=False) writer.close()
读取代码
import pandas as pd import numpy as np data = pd.read_excel('test.xlsx', sheet_name='Segmented Data') # 提取所有数组相关列 array_cols = [col for col in data.columns if col.startswith('arr_')] # 重组为numpy数组 array_data = np.array(data[array_cols].values[0]) # 恢复原始嵌套结构 original_data = [ data['id'].values[0], array_data, data['flag'].values[0], data['file_name'].values[0] ] # 测试索引操作 print(original_data[1][5]) # 输出:252.4
内容的提问来源于stack exchange,提问作者usman qadir
相关产品推荐
相关产品推荐

