2016-05-31 5 views
0

Я работаю с набором данных yelp, и, конечно, это миллионы записей, поэтому мне было интересно, есть ли способ, которым вы можете просто скачать то, что вам нужно, или вам нужно забрать его вручную? Например, у yelp есть отзывы обо всем: от авторемонта до салонов красоты, но я хочу только отзывы в ресторанах. Так что я должен прочитать всю вещь, а затем сбросить строки, которые мне не нужны?Есть ли способ предварительной фильтрации данных перед использованием read_csv для загрузки данных в dataframe pandas?

+0

Куда вы загружаете? –

+0

Я загрузил из набора данных yelp в виде json-файла, а затем использовал их конвертер, чтобы изменить его на файл csv. – mmera

+0

Можете ли вы поделиться ссылкой с тем, откуда вы его получите, я полагаю, что есть способ фильтрации. –

ответ

0

Предполагая, что вы смотрите на .csv файл, вы можете читать и предобработки chunks, а не читать полный набор данных, как в:

df = pd.DataFrame() 
chunksize = 100000 
for chunk in pd.read_csv(filename, chunksize=chunksize): 
    process(chunk) 
    df = pd.concat([df, chunk]) 

Если у вас есть возможность контролировать то, что происходит в исходный набор данных, вам Конечно, лучше.

+0

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

+0

Да, немного быстрее esp, когда время вычисления увеличивается быстрее, чем линейно с размером. – Stefan

0

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

Но если вы действительно хотите предварительно фильтровать, и вы находитесь в системе, подобной unix, вы можете предварительно фильтровать с помощью grep до начала Python.

Компромисс между ними заключается в том, чтобы написать предварительный фильтр с использованием Python и Pandas, таким образом вы загружаете данные, предварительно фильтруете их (записывайте предварительно фильтрованные данные в другой csv) и играете с вашими предварительно фильтрованными данными.

Способ перехода зависит от количества раз, когда вам нужно загрузить весь набор данных, если вы хотите прочитать один раз и отбросить его, нет необходимости предварительно фильтровать, но при работе над кодом, если вы хотите протестировать это много времени, предварительная фильтрация может сэкономить вам несколько секунд. Но опять-таки есть еще одна возможность: использовать ipython-ноутбук, чтобы вы могли загрузить ваш набор данных, отфильтровать его, а затем выполнить блок кода, в котором вы сейчас работаете какое-то время на этом уже загруженном наборе данных, это даже быстрее, чем загрузка предварительно отфильтрованного набора данных.

Так что никакого реального ответа здесь, это действительно зависит от вашего использования и личных вкусов.

+0

На самом деле работа с ноутбуком ipython оказалась намного быстрее, чем я ожидал! Благодаря! – mmera