2016-12-23 6 views
0

Я читаю пять огромных файлов CVS. Все они имеют одинаковое количество строк, но количество строк в миллионах. Из-за ограничения памяти мне нужно их прочитать в партиях и впоследствии объединить данные из разных файлов в один Dataframe.Как передать список итераторов pandas в качестве аргумента для zip?

Ниже то, что я сейчас:

import pandas as pd 
it1 = pd.read_csv('1.csv', chunksize=10) 
it2 = pd.read_csv('2.csv', chunksize=10) 

it3 it4 it5 приведены в списке list_iterators. То есть:

list_iterators = [it3 it4 it5] 

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

Так первый раз, когда я читал их, у меня будет:

[first 10 rows in 1.csv, first 10 rows in 2.csv, first 10 rows in 3.csv ... first 10 rows in 5.csv] 

Для того, чтобы достичь желаемого результата, что я делаю сейчас:

ak = zip(it1, it2, list_iterators[0], list_iterators[1], list_iterators[2]) 
ak.__next__() #I will call this to read the next 10 rows 

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

Мой второй вопрос заключается в том, что вместо использования __next__() существует ли более элегантный способ извлечения данных из итераторов pandas.

ответ

0

Интересно, есть ли способ, что я могу передать list_iterators в качестве аргумента

Да, вы можете передать содержимое list_iterators с помощью * оператора:

ak = zip(it1, it2, *list_iterators) 

 Смежные вопросы

  • Нет связанных вопросов^_^