Python Pandas read_csv к кадру данных без разделителя - PullRequest
0 голосов
/ 02 октября 2019

Я новичок в библиотеке Pandas.
У меня есть общий код, который работает с фреймом данных.

Есть ли способ читать файл gzip построчно без разделителя (используйтеполная строка, строка может включать запятые и другие символы) в виде одной строки и использовать ее в кадре данных? Кажется, что вы должны предоставить разделитель, и когда я предоставляю «\ n», он может читать, но error_bad_lines будет жаловаться на что-то вроде «Пропуск строки xxx: ожидается 22 поля, но получено 23» поля, поскольку каждая строка различна.

Я хочу, чтобы каждая строка рассматривалась как одна строка в кадре данных. Как этого достичь? Любые советы будут оценены.

1 Ответ

0 голосов
/ 02 октября 2019

, если вы просто хотите, чтобы каждая строка была одной строкой и одним столбцом, не используйте read_csv. Просто прочитайте файл построчно и постройте из него фрейм данных.

Вы можете сделать это вручную, создав пустой фрейм данных с заголовком из одного столбца. затем выполните итерацию по каждой строке в файле, добавляя ее к фрейму данных.

#explicitly iterate over each line in the file appending it to the df.
import pandas as pd
with open("query4.txt") as myfile:
    df = pd.DataFrame([], columns=['line'])
    for line in myfile:
        df = df.append({'line': line}, ignore_index=True)
    print(df)

Это будет работать для больших файлов, поскольку мы обрабатываем только одну строку за раз и строим фрейм данных, поэтому мы не используем больше памяти, чемнеобходимо. Возможно, это не самый эффективный способ переназначения кадра данных, но он наверняка сработает.

Однако мы можем сделать это более аккуратно, поскольку в качестве входных данных для данных для pandas-кадра можно использовать итерацию.

#create a list to feed the data to the dataframe.
import pandas as pd
with open("query4.txt") as myfile:
    mydata = [line for line in myfile]
    df = pd.DataFrame(mydata, columns=['line'])
    print(df)

Здесь мы читаем все строки файла в список, а затемпередать список пандам для создания данных. Однако обратная сторона этого заключается в том, что если бы наш файл был очень большим, у нас было бы 2 копии в памяти. Один в списке и один во фрейме данных.

Учитывая, что мы знаем, что pandas примет итерацию для данных, мы можем использовать выражение генератора, чтобы получить генератор, который будет передавать каждую строку файла во фрейм данных. Теперь фрейм данных будет построен самостоятельно, читая каждую строку по одной из файла.

#create a generator to feed the data to the dataframe.
import pandas as pd
with open("query4.txt") as myfile:
    mydata = (line for line in myfile)
    df = pd.DataFrame(mydata, columns=['line'])
    print(df)

Во всех трех случаях нет необходимости использовать read_csv, так как данные, которые вы хотите загрузить, не являютсяCSV. Каждое решение обеспечивает один и тот же вывод данных кадра

ИСТОЧНИК ДАННЫХ

this is some data
this is other data
data is fun
data is weird
this is the 5th line

КАДР ДАННЫХ

                   line
0   this is some data\n
1  this is other data\n
2         data is fun\n
3       data is weird\n
4  this is the 5th line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...