如何让Pandas读取CSV中的列表列时保持列表类型而非字符串
Pandas读取CSV时将列表格式字符串转回列表类型
CSV文件本身不支持存储列表类型,写入时列表会被自动转为字符串,读取时可以通过以下几种方法转回列表:
方法1:用ast.literal_eval解析字符串(简单高效)
ast.literal_eval可以安全解析字符串形式的Python数据结构,直接把列表格式的字符串转回列表:
import pandas as pd import ast # 读取时直接指定列转换器 df = pd.read_csv('file.csv', converters={'1': ast.literal_eval}) print(df['1'].values[0]) # 输出:['A', 'B', 'C'] # 或者读取后批量转换 df = pd.read_csv('file.csv') df['1'] = df['1'].apply(ast.literal_eval) print(df['1'].values[0])
方法2:自定义函数手动处理字符串
如果担心特殊字符导致ast.literal_eval报错,可以手动处理字符串格式:
import pandas as pd def str_to_list(s): # 去掉首尾的引号和方括号 s_clean = s.strip('"[]') # 按逗号分割,再清理每个元素的引号和空格 return [item.strip("' ") for item in s_clean.split(',') if item.strip()] df = pd.read_csv('file.csv') df['1'] = df['1'].apply(str_to_list) print(df['1'].values[0]) # 输出:['A', 'B', 'C']
方法3:写入时提前序列化(从根源避免问题)
写入CSV前把列表转成JSON字符串,读取时再解析,能更好兼容复杂列表结构:
import pandas as pd import json d = [['d',['A','B','C']],['p',['F','G']]] df = pd.DataFrame(d) # 写入时将列表列转为JSON格式字符串 df['1'] = df['1'].apply(json.dumps) df.to_csv('file.csv', index=False) # 读取时解析JSON字符串 df_read = pd.read_csv('file.csv') df_read['1'] = df_read['1'].apply(json.loads) print(df_read['1'].values[0]) # 输出:['A', 'B', 'C']
内容的提问来源于stack exchange,提问作者user15649753
相关产品推荐
相关产品推荐

