如何保存含列表的DataFrame数据集并还原原始数据
解决DataFrame列表列存CSV后读取还原问题
CSV格式本身不支持列表类型,直接存储会自动将列表转为字符串,你之前用的strip+split方法太简陋,没法处理复杂情况(比如元素带引号、数值类型丢失)。下面是两种可靠的解决方法:
方法一:保存前序列化列表(推荐)
用JSON格式把列表转成标准字符串,读取时再反序列化,能完整保留原始结构和类型:
保存代码
import pandas as pd import json # 假设目标列为C2_ACP,将列表转为JSON字符串 df['C2_ACP'] = df['C2_ACP'].apply(json.dumps) df.to_csv('data.csv', index=False)
读取代码
import pandas as pd import json def parse_json_list(x): try: return json.loads(x) except: return x # 兼容非列表列的情况 df = pd.read_csv('data.csv', converters={'C2_ACP': parse_json_list})
方法二:改进读取时的转换函数(适配未提前序列化的CSV)
如果已经用原始方式保存了CSV,可以用更健壮的转换函数处理,修复元素类型和空值问题:
import pandas as pd def restore_list(x): # 处理空列表的情况 if x.strip() == '[]': return [] # 清理并分割元素 raw_elements = [elem.strip().strip("'\"") for elem in x.strip('[]').split(',')] # 尝试转换为数值类型,失败则保留字符串 restored = [] for elem in raw_elements: if not elem: continue try: # 区分整数和浮点数 restored.append(int(elem) if '.' not in elem else float(elem)) except ValueError: restored.append(elem) return restored df = pd.read_csv('data.csv', converters={'C2_ACP': restore_list})
注意:方法二有局限性,如果列表元素本身包含逗号或引号,会出现分割错误,所以优先用方法一。
内容的提问来源于stack exchange,提问作者Artashes
相关产品推荐
相关产品推荐

