读取pandas中带有逗号和字符的CSV文件时出现问题

2024-06-09 16:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用pandas读取csv文件,该文件有一个名为Tags的列,该列由用户提供的标记组成,包含-、“”、''、1950、16世纪等标记。由于这些都是用户提供的,所以也有许多错误输入的特殊字符。问题是我无法使用pandas read_csv打开csv文件。它显示错误:Cparser,错误标记数据。有人能帮我把csv文件读入pandas吗?


Tags: 文件csv数据用户标记pandasread错误
1条回答
网友
1楼 · 发布于 2024-06-09 16:24:05

好吧。从格式错误的CSV开始,我们无法读取:

>>> !cat unquoted.csv
1950's,xyz.nl/user_003,bad, 123
17th,red,flower,xyz.nl/user_001,good,203
"",xyz.nl/user_239,not very,345
>>> pd.read_csv("unquoted.csv", header=None)
Traceback (most recent call last):
  File "<ipython-input-40-7d9aadb2fad5>", line 1, in <module>
    pd.read_csv("unquoted.csv", header=None)
[...]
  File "parser.pyx", line 1572, in pandas._parser.raise_parser_error (pandas/src/parser.c:17041)
CParserError: Error tokenizing data. C error: Expected 4 fields in line 2, saw 6

我们可以制作一个更好的版本,利用最后三列表现良好的事实:

import csv

with open("unquoted.csv", "rb") as infile, open("quoted.csv", "wb") as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    for line in reader:
        newline = [','.join(line[:-3])] + line[-3:]
        writer.writerow(newline)

产生

>>> !cat quoted.csv
1950's,xyz.nl/user_003,bad, 123
"17th,red,flower",xyz.nl/user_001,good,203
,xyz.nl/user_239,not very,345

然后我们可以读到:

>>> pd.read_csv("quoted.csv", header=None)
                 0                1         2    3
0           1950's  xyz.nl/user_003       bad  123
1  17th,red,flower  xyz.nl/user_001      good  203
2              NaN  xyz.nl/user_239  not very  345

不过,我会从源头上解决这个问题,并以一种可以接受的格式获取数据。像这样的把戏不应该是必要的,而且很容易就不可能修复了。

相关问题 更多 >