Кажется, что yield
не работает с pandas.DataFrame.itertuples()
, почему?Выход не работает с pandas.DataFrame.itertuples()?
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
def f():
for r in df.itertuples():
yield r
print(f().next())
print(f().next())
1-я строка выведена дважды.
EDIT
исходный код:
DataHandler(object):
def __init__(self, csv_dir):
self.csv_dir = csv_dir
self.data = pd.DataFrame()
self._open_convert_csv_files()
def _open_convert_csv_files(self):
self.data = pd.read_csv(self.csv_dir)
def _get_new_row(self):
for t in self.data.itertuples():
yield t
def get_N_rows(self, N=1):
list = []
for i in range(N):
row = self._get_new_row().next() # problem is here
list.append(row)
return list
Я зову self._get_new_row()
в get_N_rows
, который является проблемой, каждый раз, когда я называю _get_new_row()
я получаю только 1-й ряд, как бы я сделать g = _get_new_row()
для g
в качестве участника?
Я думаю, что я понял, внутри '__init__' do' self.g = self._get_new_row() 'и меняет' self._get_new_row(). Next() 'to' self.g.next() 'работает. – Allanqunzi