pandas.read_csv()逗号分隔符未生效 第二列全为Null如何解决
问题原因
你遇到的第二列全为Null的问题,核心原因是当前CSV文件的格式不符合pandas默认解析规则:
- 每条完整记录外层额外包裹了一层双引号,导致pandas把包含逗号的整条内容识别为单个引用字段,不会按逗号拆分列
- Review字段本身包含换行符,默认解析逻辑在引号匹配错位时会直接把后续字段识别为空值
解决方案
你可以按优先级尝试以下两种方案:
方案1:调整read_csv解析参数(优先试)
通过显式指定引号处理规则、兼容多行字段,用pandas原生能力解析,代码更简洁:
import pandas as pd import csv train = pd.read_csv( 'yelp_review_polarity_csv/train.csv', header=None, names=['Class', 'Review'], encoding="cp1251", # 保留你之前的编码设置,避免特殊字符乱码 sep=",", quotechar='"', doublequote=True, quoting=csv.QUOTE_ALL, engine='python', # Python引擎对多行引用字段的兼容性优于默认C引擎 on_bad_lines='warn' # 解析异常时打印警告,方便定位问题行 )
如果运行后发现Class列仍带有多余引号/逗号,说明文件的引号嵌套不满足标准CSV规范,直接用方案二手动清洗,稳定性更高。
方案2:全量读取后手动拆分(100%兼容你的文件格式)
如果参数调整后解析结果不符合预期,绕过pandas的默认CSV解析逻辑,直接按你文件的固定格式拆分字段,不会出现错位问题:
import pandas as pd # 一次性读取整个文件的全部内容 with open('yelp_review_polarity_csv/train.csv', 'r', encoding='cp1251') as f: file_content = f.read() # 按每条记录的结束标记(三个双引号)拆分内容块,过滤空块 content_blocks = [block.strip() for block in file_content.split('"""') if block.strip()] parsed_data = [] for block in content_blocks: # 移除块开头多余的外层双引号 block = block.lstrip('"') # 按第一个逗号拆分,第一部分是Class,剩余部分是Review class_val, review_val = block.split(',', maxsplit=1) # 清理Review首尾多余的双引号、空白字符、换行 review_val = review_val.lstrip('" ').rstrip(' "\n') parsed_data.append({ 'Class': int(class_val), 'Review': review_val }) # 转为目标格式的DataFrame train = pd.DataFrame(parsed_data)
运行后你会得到完全符合预期的两列结构:Class列为整数类型的分类值,Review列为清洗后的评论文本。
内容的提问来源于stack exchange,提问作者maxet24
相关产品推荐
相关产品推荐

