【问题标题】:How can I read the csv file in pandas which is separated with ";"?如何读取以“;”分隔的 pandas 中的 csv 文件?
【发布时间】:2017-06-09 11:23:03
【问题描述】:

我开始在 python 3.4 中使用 pandas 几天。我选择在Book-Crossing data set工作。
图书信息表是这样的:



图书评分表是这样的:



我想从图书信息表中获取“ISBN”、“书名”,并将其与都匹配“ISBN”的图书评级表合并,然后将结果写入另一个 csv 文件。 我使用了下面的代码:

udata = pd.read_csv('1', names = ('User_ID', 'ISBN', 'Book-Rating'), encoding="ISO-8859-1", sep=';', usecols=[0,1,2])
uitem = pd.read_csv('2', names = ('ISBN', 'Book-Title'), encoding="ISO-8859-1", sep=';', usecols=[0,1])
ratings = pd.merge(udata, uitem, on='ISBN')
ratings.to_csv('ratings.csv', index=False)

不幸的是,它不起作用并给出错误:

Traceback (most recent call last):
File "C:\Users\masoud\Desktop\Dataset\data2\a.py", line 2, in <module>
udata = pd.read_csv('2.csv', names = ('User_ID', 'ISBN', 'Book-Rating'),encoding="ISO-8859-1", sep=';', usecols=[0,1,2])
File "C:\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\lib\site-packages\pandas\io\parsers.py", line 491, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\lib\site-packages\pandas\io\parsers.py", line 278, in _read
return parser.read()
File "C:\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\lib\site-packages\pandas\io\parsers.py", line 740, in read
ret = self._engine.read(nrows)
File "C:\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\lib\site-packages\pandas\io\parsers.py", line 1187, in read
data = self._reader.read(nrows)
File "pandas\parser.pyx", line 758, in pandas.parser.TextReader.read (pandas\parser.c:7919)
File "pandas\parser.pyx", line 780, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:8175)
File "pandas\parser.pyx", line 833, in pandas.parser.TextReader._read_rows (pandas\parser.c:8868)
File "pandas\parser.pyx", line 820, in pandas.parser.TextReader._tokenize_rows (pandas\parser.c:8736)
File "pandas\parser.pyx", line 1732, in pandas.parser.raise_parser_error (pandas\parser.c:22105)
pandas.parser.CParserError: Error tokenizing data. C error: Expected 8   fields in line 6452, saw 9

我想知道是否有人可以修复错误?

【问题讨论】:

  • 好的。我照你说的做了。
  • 它说在第 6452 行中,有一个额外的 sep char ";",它试图将其拆分为多个不可用的列。也许尝试error_bad_lines=False,但这会在输出跳过的行号时跳过错误的行。另一种选择是在识别出错误的解析后分别读取它们来处理正确和不正确的解析。

标签: python-3.x csv pandas dataset


【解决方案1】:

在第一行和第二行,将sep 更改为;

sep=';'

【讨论】:

  • 我编辑了问题并将 sep = ',' 更改为 sep = ';'。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
相关资源
最近更新 更多