ParserError при разборе большого txt файла с помощью Pandas
Я пытаюсь разобрать большой файл.txt с помощью Pandas. Размер файла - 1,6 ГБ. Вы можете скачать файл здесь (это дамп базы данных GeoNames всех стран и населенных пунктов).
Что касается загрузки и анализа файла в Pandas, я проконсультировался с ответами здесь и здесь, и вот что у меня есть в коде:
import pandas as pd
for chunk in pd.read_csv(
"allCountries.txt",
header=None,
engine="python",
sep=r"\s{1,}",
names=[
"geonameid",
"name",
"asciiname",
"alternatenames",
"latitude",
"longitude",
"feature class",
"feature code",
"country code",
"cc2",
"admin1 code",
"admin2 code",
"admin3 code",
"admin4 code",
"population",
"elevation",
"dem",
"timezone",
"modification date",
],
chunksize=1000,
):
print(chunk[0]) # just printing out the first row
Если я запускаю приведенный выше код, я получаю следующую ошибку:
ParserError: Ожидается 20 полей в строке 1, видно 25. Ошибка могла быть связана с игнорированием кавычек при использовании разделителя из нескольких символов.
Я не знаю, что здесь не так. Может ли кто-нибудь сказать мне, что происходит не так и как мне это исправить?
2 ответа
Открытие первых 10 строк файла с помощью LibreOffice и использование табуляции в качестве разделителя работало нормально
import csv
import pandas as pd
for chunk in pd.read_csv(
'allCountries.txt',
header=None,
engine="python",
sep="\t",
names=[
"geonameid",
"name",
"asciiname",
"alternatenames",
"latitude",
"longitude",
"feature class",
"feature code",
"country code",
"cc2",
"admin1 code",
"admin2 code",
"admin3 code",
"admin4 code",
"population",
"elevation",
"dem",
"timezone",
"modification date",
],
quoting=csv.QUOTE_NONE,
chunksize=1000
):
print(chunk.iloc[0]) # just printing out the first row
Файл также содержит символы 'и ", которые панды по умолчанию предполагают использовать для цитирования и вызывали ошибки, но установка цитирования в QUOTE_NONE исправила это.
Ваш разделитель был неправильным, поскольку у вас есть пробелы в одном столбце (имена):
2986043 Pic de Font Blanca Pic de Font Blanca Pic de Font Blanca,Pic du Port 42.64991 1.53335 T PK AD 00 0 2860 Европа / Андорра 05.11.2014
Это было неправильно проанализировано.
Этот код работает для меня:
for chunk in pd.read_csv(
"allCountries.txt",
header=None,
engine="python",
sep=r"\t+",
names=[
"geonameid",
"name",
"asciiname",
"alternatenames",
"latitude",
"longitude",
"feature class",
"feature code",
"country code",
"cc2",
"admin1 code",
"admin2 code",
"admin3 code",
"admin4 code",
"population",
"elevation",
"dem",
"timezone",
"modification date",
],
chunksize=1000,
):
print(chunk)