Pandas.read_csv读取截断至50字符,无法解析CSV嵌套列表数据
问题原因及解决方法
问题原因
你遇到的字符串截断是因为pandas的to_string()方法默认会对过长的字符串进行截断(默认显示长度限制为50),导致得到的是不完整的列表字符串,因此ast.literal_eval解析时触发了unterminated string literal语法错误。
替代解决方法
方法1:逐行解析嵌套列表
不要将整个Series转为字符串,而是对每一行的Bids值单独解析:
import pandas as pd import ast df = pd.read_csv('C:/Users/Ethan/Desktop/csv/test.csv', names=['E','ID','Bids','Asks']) # 对Bids列的每个元素执行解析,再转为普通列表 bids_list = df['Bids'].apply(ast.literal_eval).tolist() # 此时bids_list可直接用于zip、map等操作
方法2:读取CSV时直接指定转换器
在读取阶段就完成嵌套列表的解析,效率更高:
import pandas as pd import ast def parse_nested_list(s): # 可选:添加预处理,比如去除首尾空格 return ast.literal_eval(s.strip()) df = pd.read_csv( 'C:/Users/Ethan/Desktop/csv/test.csv', names=['E','ID','Bids','Asks'], # 为Bids和Asks列指定解析函数 converters={'Bids': parse_nested_list, 'Asks': parse_nested_list} ) # 转为普通列表 bids_list = df['Bids'].tolist()
额外注意
如果CSV中的嵌套列表字符串存在格式瑕疵(比如多余空格、引号不匹配),可以在解析函数中增加预处理逻辑,确保字符串符合Python列表语法规范。
内容的提问来源于stack exchange,提问作者Philip C.
相关产品推荐
相关产品推荐

