熊猫在列中使用额外的逗号读取 csv

Posted

技术标签:

【中文标题】熊猫在列中使用额外的逗号读取 csv【英文标题】:pandas read csv with extra commas in column 【发布时间】: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 忽略特定列中的逗号或解决这个问题的方法?

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

我不认为他的字符串有引号,因为如果有的话,那么熊猫会在没有quotechar的情况下识别它 @David Ok 明白了。您的数据框已按“原样”提供,或者您可以对其进行一些预处理? @David 看看this的问题,希望对你有帮助。 @David 为什么不直接从 SQL 导入,可能是这样的***.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://***.com/a/40477760/6907424

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

【讨论】:

以上是关于熊猫在列中使用额外的逗号读取 csv的主要内容,如果未能解决你的问题,请参考以下文章

熊猫读取的csv返回额外的未知列

用熊猫在列中绘制带有年份的数据框

尾随分隔符使熊猫 read_csv 感到困惑

熊猫在没有标题的表格中读取

如何使用熊猫在特定列中的csv文件中查找特定单词

如何一次从熊猫的所有列中删除逗号