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

Dav*_*vid 11 python csv pandas

我正在读一个基本的csv文件,其中列用逗号分隔,并带有以下列名:

userid, username, body

但是,body列是一个可能包含逗号的字符串.显然这会导致问题,并且大熊猫会抛出错误:

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

有没有办法告诉大熊猫忽略特定列中的逗号或解决此问题的方法?

Fab*_*nna 16

想象一下,我们正在阅读您的数据框comma.csv:

userid, username, body
01, n1, 'string1, string2'
Run Code Online (Sandbox Code Playgroud)

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

df = pd.read_csv('comma.csv', quotechar="'")
Run Code Online (Sandbox Code Playgroud)

在这种情况下,分隔的字符串'被视为总数,无论它们内部是否有逗号.

  • 我不认为他的字符串有引号,因为如果它确实那么熊猫会在没有`quotechar`的情况下识别它 (2认同)
  • @David看看[这个](http://stackoverflow.com/q/14550441/2699288)的问题,希望对你有所帮助. (2认同)
  • 我尝试了此示例,但不适用于我。Python 3中,pandas 0.18.0读取`comma.csv`,但是`01`成为索引`1`,而`username`仅成为`'string1` :( (2认同)

Ily*_*yas 8

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

就我而言:

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


Ant*_*jnc 6

对我来说,上述代码示例都不起作用(我正在 Kaggle 上处理 Netflix 奖数据集),但实际上 pandas 1.3.0+ 版本有一个很酷的功能,它是一个on_bad_lines允许您使用回调函数的参数。这是我所做的:

def manual_separation(bad_line):
    right_split = bad_line[:-2] + [",".join(bad_line[-2:])] # All the "bad lines" where all coming from the same last column that was containing ","
    return right_split

filename = "netflix_movie_titles.csv"
df = pd.read_csv(
        filename, 
        header=None,
        encoding="ISO-8859-1",
        names = ['Movie_Id', 'Year', 'Name'], 
        on_bad_lines=manual_separation,
        engine="python",
    )
Run Code Online (Sandbox Code Playgroud)

奇迹般有效!您唯一的义务是使用engine=python. 希望有帮助!