Pandas - L oop через более 1 миллиона ячеек - PullRequest
1 голос
/ 02 апреля 2020

У меня есть экспортированный файл с более чем 200 000 кодов, которые я пытаюсь отфильтровать только по кодам. Сам файл становится более 1 миллиона строк из-за того, что каждый код содержит несколько строк несущественной информации.

Я написал скрипт для чтения файла, поиска кодов на основе префикса и записи в другой файл .csv:

import pandas as pd

df = pd.read_csv('export_file.csv')

output = []

for index, row in df.iterrows(): 
  if ('PREFIX-01' in str(row['code'])):
    code = str(row['code'])
    output.append(code)

with open('output.csv','w') as file:
    for line in output:
        file.write(line)
        file.write('\n')

Скрипт хорошо работает для меньшего числа кодов (около 50 тыс.), но это займет ДЛИННОЕ время, чтобы l oop пройти через все эти ряды. Python и Pandas относительно новы для меня, поэтому мне интересно, есть ли способ сделать скрипт более эффективным?

Я слышал, что grep будет здесь полезно, но цель в конечном итоге состоит в том, чтобы записать это в веб-сервис, поэтому я бы не стал делать это через командную строку.

1 Ответ

1 голос
/ 02 апреля 2020

Благодаря @Datanovice программа стала работать намного лучше. Время выполнения уменьшено с ~ 10 минут до 5 секунд.

import pandas as pd
import time

df = pd.read_csv('exported_file.csv')


df2 = df[df['code'].str.contains('PREFIX-01', na=False)]
output = df2['code'] # Feels redundant for this step (only extract the code column) 
                     # Tips are welcome how to bake it into the line above 

output.to_csv('output.csv', sep=',', encoding='utf-8', index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...