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

Pandas保存含数组列的DataFrame到CSV后加载类型异常解决方法

解决CSV加载后数组列变为Object类型的问题

CSV是纯文本格式,无法原生保留数组、列表这类复杂数据类型,直接存CSV必然会丢失类型信息,导致加载后数组列变成object类型。以下是两种解决思路:

一、改用支持复杂类型的文件格式保存

放弃CSV,使用pandas支持的二进制格式,能完整保留所有数据类型:

1. Pickle格式(最简单,仅Python环境可用)

# 保存数据
ladder.to_pickle("ladder.pkl")
# 加载数据
ladder = pd.read_pickle("ladder.pkl")

加载后lwave列直接保留原数组类型,可正常访问元素。

2. Feather/Parquet格式(跨语言友好,读写效率高)

如果需要其他语言也能读取数据,优先选这两种格式:

# Feather格式
ladder.to_feather("ladder.feather")
ladder = pd.read_feather("ladder.feather")

# Parquet格式
ladder.to_parquet("ladder.parquet")
ladder = pd.read_parquet("ladder.parquet")

二、必须用CSV时,加载后转换列类型

如果受限于需求只能用CSV,加载后可将object类型的列转成数组:

1. 安全转换:使用ast.literal_eval

import pandas as pd
from ast import literal_eval

# 方式1:加载时直接指定转换器
ladder = pd.read_csv("ladder.csv", converters={"lwave": literal_eval})

# 方式2:加载后再批量转换
ladder = pd.read_csv("ladder.csv")
ladder["lwave"] = ladder["lwave"].apply(literal_eval)

literal_eval仅解析Python字面量(列表、字典等),不会执行任意代码,比eval更安全,适合大多数场景。

2. 快速转换:使用eval(仅可信数据可用)

如果数据是自己生成的、绝对安全,可以用eval快速转换:

ladder = pd.read_csv("ladder.csv")
ladder["lwave"] = ladder["lwave"].apply(eval)

注意:不可用于来源不明的数据,存在恶意代码执行风险。

内容的提问来源于stack exchange,提问作者twistfire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:46:03