Условие Skiprow основано на значениях, а не на индексе в пандах - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь прочитать CSV-файл в пандах.Данные выглядят следующим образом:

Date    Value   Valid
23/05/2018  12  Yes
24/05/2018  13  No
25/05/2018  45  No
26/05/2018  11  Yes
27/05/2018  66  Yes
28/05/2018  50  No
29/05/2018  34  Yes
30/05/2018  27  No

Я хочу читать строки только в том случае, если входное значение для столбца Valid равно Да.Каков наилучший способ сделать это?

Я бы хотел отфильтровать его до, а не после прочтения.

1 Ответ

0 голосов
/ 30 мая 2018

Вы не можете игнорировать строки, прежде чем прочитаете их.

Вместо этого вы можете фильтровать после чтения данных:

# read file to dataframe
df = pd.read_csv('file.csv')

# apply mask to dataframe
df = df[df['Valid'] == 'Yes']

Если вы столкнулись с проблемами памяти, так как, например, тамочень большое количество строк «Нет», которые дорого читать в памяти, можно разделить на части.Удобный способ создания чанков в режиме без вывода сообщений - dask.dataframe:

import dask.dataframe as dd

# create lazy reader object
df = dd.read_csv('file.csv')

# define filtering logic
df = df[df['Valid'] == 'Yes']

# apply filtering logic and convert to pandas dataframe
df = df.compute()

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

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