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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:25:21