如何用Pandas读取含List格式多值列的CSV文件?
解决特殊格式CSV读取的ParserError问题
直接用pd.read_csv()报错的核心原因:CSV第二列的List(...)结构包含大量逗号,被pandas误判为列分隔符,导致每行实际字段数和预期不符。
方法1:逐行读取并保留数组为列表列
通过正则精准匹配每行的三个字段,避免误分割数组内的逗号:
import pandas as pd import re # 定义正则模式,捕获timestamp、数组内容、identifier三个部分 line_pattern = r'^(\d+),\s*List\((.*?)\),\s*(.*)$' parsed_data = [] with open("myFilePath", 'r', encoding='utf-8') as file: # 跳过表头(如果文件第一行是表头,不需要则注释此行) next(file) for line in file: line = line.strip() if not line: continue match_result = re.match(line_pattern, line) if match_result: # 提取并转换各字段 timestamp = int(match_result.group(1)) # 分割数组元素并转为float(支持科学计数法格式) value_list = [float(val.strip()) for val in match_result.group(2).split(',')] identifier = match_result.group(3) parsed_data.append({ 'timestamp': timestamp, 'identifier': identifier, 'values': value_list }) # 转换为目标DataFrame df = pd.DataFrame(parsed_data)
方法2:将数组展开为单独列
如果需要把数组中的每个值作为独立列展示,在方法1的基础上添加以下代码:
# 将values列展开为多列,自动命名为value_1、value_2... expanded_values = pd.DataFrame(df['values'].tolist(), columns=[f'value_{idx+1}' for idx in range(len(df['values'][0]))]) # 合并原字段与展开后的列 final_df = pd.concat([df[['timestamp', 'identifier']], expanded_values], axis=1)
额外适配说明
- 如果CSV没有表头,直接删除
next(file)代码。 - 如果identifier字段包含逗号(比如被引号包裹),可调整正则为
^(\d+),\s*List\((.*?)\),\s*"(.*)"$来适配。
内容的提问来源于stack exchange,提问作者TheSocks221
相关产品推荐
相关产品推荐

