как обрабатывать все столбцы, кроме одного, перед объединением фрагментов при использовании фрагментов для чтения большого файла csv

У меня есть большой CSV-файл (7 ГБ), и я использовал эти коды для его чтения в Pandas:

chunks=pd.read_table('input_filename', chunksize=500000)
df=pd.DataFrame()
df=pd.concat((chunk==1) for chunk in chunks)

Это работает для меня, потому что файл закодирован горячим способом, поэтому часть chunk==1 преобразует 0 и 1 в логические значения, что сэкономило мне некоторое использование памяти.

Теперь я хочу использовать этот же метод для чтения в другом файле, единственная проблема заключается в том, что в новом файле есть столбец ID, который не является горячим кодированием. Мой вопрос: как я могу сохранить столбец ID нетронутым и таким же образом преобразовать остальные столбцы?

Я пробовал некоторые методы подмножества, в том числе:

df=pd.concat((chunk.loc[:, -1]==1) for chunk in chunks)

но ни один из них не работал до сих пор.

Спасибо!


person user3768495    schedule 20.09.2017    source источник


Ответы (1)


Попробуй это:

chunks = pd.read_csv('input_filename', chunksize=500000, index_col='ID')
df = pd.concat([chunk.astype(bool) for chunk in chunks]).reset_index()
person MaxU    schedule 20.09.2017
comment
Я получил идею! Но выдает ошибку: Generator expression must be parenthesized if not sole argument. И тогда я попробовал: df=pd.concat((chunk.set_index('ID').astype(bool)) for chunk in chunks, ignore_index=True), все та же ошибка... Может быть, я поставил скобки не в том месте? - person user3768495; 20.09.2017
comment
Привет @MaxU, я тоже пробовал. Все та же ошибка. Может ли это быть связано с разными версиями Python/Pandas? Мой Python — 2.7.13, а мои панды — 0.20.2. Благодарю вас! - person user3768495; 21.09.2017
comment
После некоторых проб и ошибок я обнаружил, что после удаления части ignore_index=True код работает. Итак, вот что у меня сейчас работает: `df=pd.concat((chunk.set_index('ID').astype(bool)) для чанка в чанках)'. - person user3768495; 21.09.2017