You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:12:21