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)
Другие вопросы по тегам