【问题标题】:pandas read csv with extra commas in column熊猫在列中使用额外的逗号读取 csv
【发布时间】:2015-12-21 00:02:31
【问题描述】:

我正在读取一个基本的 csv 文件,其中的列用逗号分隔,这些列名:

userid, username, body

但是,body 列是一个可能包含逗号的字符串。显然这会导致问题,pandas 会抛出错误:

CParserError: Error tokenizing data. C error: Expected 3 fields in line 3, saw 8

有没有办法告诉 pandas 忽略特定列中的逗号或解决这个问题的方法?

【问题讨论】:

    标签: python csv pandas


    【解决方案1】:

    假设我们正在读取您的名为 comma.csv 的数据框:

    userid, username, body
    01, n1, 'string1, string2'
    

    您可以做的一件事是在列中指定字符串的分隔符:

    df = pd.read_csv('comma.csv', quotechar="'")
    

    在这种情况下,由' 分隔的字符串被视为全部字符串,无论它们中的逗号如何。

    【讨论】:

    • 我不认为他的字符串有引号,因为如果有的话,那么熊猫会在没有quotechar的情况下识别它
    • @David Ok 明白了。您的数据框已按“原样”提供,或者您可以对其进行一些预处理?
    • @David 看看this的问题,希望对你有帮助。
    • @David 为什么不直接从 SQL 导入,可能是这样的stackoverflow.com/questions/12047193/…
    • 我试过这个例子,但对我不起作用。 Python 3,pandas 0.18.0 读取 comma.csv01 成为索引 1,而 username 仅成为 'string1 :(
    【解决方案2】:

    将 usecols 和 lineterminator 添加到您的 read_csv() 函数中,其中 n 是列的长度。

    就我而言:

    n = 5 #define yours
    df = pd.read_csv(file,
                     usecols=range(n),
                     lineterminator='\n',
                     header=None)
    

    【讨论】:

    • 帮助解决了我的问题。谢谢!
    【解决方案3】:

    这有帮助吗?

    import csv
    with open("csv_with_commas.csv", newline='', encoding = 'utf8') as f:
        csvread = csv.reader(f)
        batch_data = list(csvread)
        print(batch_data)
    

    参考:

    [1]https://stackoverflow.com/a/40477760/6907424

    [2] 解决“UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 157: character maps to undefined”:https://stackoverflow.com/a/9233174/6907424

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多