Создание кадра данных из текстового файла на основе определенных критериев - PullRequest
0 голосов
/ 15 января 2020

У меня есть текстовый файл около 3,3 ГБ. Меня интересуют только 2 колонки в этом текстовом файле (из 47). Из этих 2 столбцов мне нужны только строки, где col2=='text1'. Например, предположим, что мой текстовый файл имеет следующие значения:

текстовый файл:

col1~col2~~~~~~~~~~~~
12345~text1~~~~~~~~~~~~
12365~text1~~~~~~~~~~~~
25674~text2~~~~~~~~~~~~
35458~text3~~~~~~~~~~~~
44985~text4~~~~~~~~~~~~

Я хочу создать df, где col2=='text1'. То, что я сделал до сих пор, пытается загрузить весь текстовый файл в мой df, а затем отфильтровать необходимые строки. Однако, поскольку это большой текстовый файл, создание df занимает более 45 минут. Я считаю, что загрузка только необходимых строк (если возможно) была бы идеальной, поскольку df был бы значительно меньшего размера, и я не буду сталкиваться с проблемами с памятью.

Мой код:

df=pd.read_csv('myfile.txt',low_memory=False,sep='~',usecols=['col1','col2'],dtype={'col2':str})
df1=df[df['col2']=='text1']

Короче говоря, можно ли отфильтровать столбец на основе критериев при загрузке текстового файла в фрейм данных, чтобы 1) Сократить время загрузки и 2 ) Уменьшите размер df в моей памяти.

1 Ответ

0 голосов
/ 15 января 2020

Ладно, вот я и придумал решение. В основном это связано с загрузкой данных в чанках и фильтрацией чанков для col2=='text1'. Таким образом, каждый раз в память загружается только кусок, и мой окончательный df будет содержать только те данные, которые мне нужны.

Код:

final=pd.DataFrame()

df=pd.read_csv('myfile.txt',low_memory=False,sep='~',usecols=['col1','col2'],dtype={'col2':str},chunksize=100000)

for chunk in df:
    a=chunk[chunk['col2']=='text1']
    final=pd.concat([final,a],axis=0)

Лучшие альтернативы, если таковые имеются, будут приветствоваться!

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