如何将CSV中混合的列表字符串与普通字符串转为对应类型存入Pandas DataFrame?
解决Pandas CSV读取中混合字符串与列表字符串的类型转换及单列列表读取混乱问题
一、混合列的类型转换(字符串转列表/保留原字符串)
直接使用literal_eval会因普通字符串无法解析报错,可自定义容错转换函数,通过异常捕获处理两种场景:
from ast import literal_eval import pandas as pd def parse_mixed_strings(s): try: # 尝试解析为Python原生类型(列表、元组等) return literal_eval(s) except (SyntaxError, ValueError): # 解析失败则返回原字符串 return s # 将函数应用到目标列 df['your_column'] = df['your_column'].apply(parse_mixed_strings)
该函数会自动识别列表格式字符串并转为list类型,普通字符串保持str类型,避免触发解析错误。
二、解决单列列表CSV读取混乱的问题
当CSV仅包含一列列表格式数据时,默认逗号分隔符会把列表内部的逗号误判为列分隔符,导致内容拆分混乱,可通过以下两种方式解决:
方法1:使用特殊分隔符存储与读取
存储时指定一个不会出现在内容中的分隔符(如|):
df.to_csv('list_only.csv', sep='|', index=False)
读取时使用相同分隔符:
df = pd.read_csv('list_only.csv', sep='|') # 应用转换函数处理列 df['your_list_col'] = df['your_list_col'].apply(parse_mixed_strings)
方法2:强制全量引用读取
利用csv模块的引用规则,确保整个单元格内容被识别为单一值:
import csv df = pd.read_csv('list_only.csv', quoting=csv.QUOTE_ALL, engine='python') # 后续应用转换函数处理列 df['your_list_col'] = df['your_list_col'].apply(parse_mixed_strings)
内容的提问来源于stack exchange,提问作者julez8000
相关产品推荐
相关产品推荐

