Панды: read.csv () - только для чтения строки с определенной длиной столбца - PullRequest
0 голосов
/ 15 мая 2018

У меня есть большие CSV-файлы с ~ 50 тыс. Строк, которые содержат 2000 столбцов данных, за которыми следуют ~ 200 тыс. Строк, содержащих 6000 столбцов.

Я импортирую несколько файлов с:

pd.concat((pd.read_csv(f,index_col='Unnamed: 0', error_bad_lines=False) for f in file_list))

Это может либо привести к ошибке в первой строке из 6000 столбцов, которая ожидает только 2000, либо, добавив error_bad_lines=False, она пропускает все 6000 строк столбцов.

Я счастлив в этомСитуация просто отбросить все 2000 строк столбцов, если это необходимо.Есть ли способ сделать это с пандами?

1 Ответ

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

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

Пропускать короткие строки.

Если вы знаете, сколько у вас будет строк в 2000 столбцов, и особенно, если оно одинаково для каждого из ваших файлов, используйте skiprows, чтобы начать чтение в начале раздела из 6000 столбцов.

Прочитайте все и затем отбросьте плохие строки.

Это требует немного усилий, поскольку, как вы обнаружили, pandas использует первую строку файла для определения количества ожидаемых полей; вам нужно добавить заголовок с 6000 столбцов или передать names с правильной длиной до read_csv. Это приведет к тому, что ваши 2000 строк столбцов будут заполнены большим количеством значений NA, после чего вы можете использовать dropna с соответствующим пороговым значением, чтобы отбрасывать строки с более чем 4000 NA.

Заранее сделайте предварительную обработку файлов

Если это единовременная ситуация, когда вам нужно только обработать этот текущий набор файлов и не встретить новые в будущем, и у вас есть доступ к командной строке, где находятся файлы, это одна строка awk чтобы вытащить строки нужной длины:

awk -F, 'NF==6,000" file.csv > fixed_file.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...