Панды - в значении поля существует разделитель трубы, что приводит к неправильным строкам - PullRequest
0 голосов
/ 15 ноября 2018

Я использую Pandas для импорта текстового файла следующим образом:

data = pd.read_csv('filepath.txt', sep='|', quoting=3, 
                    error_bad_lines=False, encoding='latin1', low_memory=False)

Я получаю сообщение об ошибке в 1 строке, потому что в значении поля обнаружена труба. Когда он пытается проанализировать строку, он обнаруживает, что длина строки слишком велика, что выдает ошибку. Это позволяет файлу обрабатывать; однако этот ряд отсутствует.

Пример:

Строка -

4321|Test|1/2/1900
1234|Test||1/1/1900

Анализ этого файла создаст:

4321   Test    1/2/1900
1234   Test               1/1/1900

Я хочу устранить лишние | во втором ряду «Тест |» или позвольте пандам понять, что он существует, чтобы создать:

4321   Test    1/2/1900
1234   Test    1/1/1900

или это было бы хорошо:

 1234   Test|    1/1/1900

Я пытался использовать конвертеры, другие методы цитирования (квотчары и т. Д.), Но безрезультатно.

Есть идеи, как это сделать? Все рекомендации приветствуются.

Эрик

1 Ответ

0 голосов
/ 15 ноября 2018

Я думаю, что самым простым способом было бы удалить любой экземпляр "||" тогда используйте панд. Примером этого может быть:

import pandas as pd
from io import StringIO


buffer= StringIO()
with open(r'filepath.txt', 'r') as f:
    for line in f.readlines():
        if "||" not in line:
            buffer.write(line)




buffer.seek(0)
data = pd.read_csv(buffer, sep='|', quoting=3,
                    error_bad_lines=False, encoding='latin1', low_memory=False)

Вы также можете сделать это вне python с помощью операции поиска и замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...