Ошибка итерации двух кадров данных панд, когда один кадр данных пуст - PullRequest
0 голосов
/ 28 сентября 2018

Я пытался перебрать два pandas dataframes , используя zip .Это работает отлично, пока у меня нет значений, доступных в обоих фреймах данных.Если один из фреймов данных пуст, он не будет повторяться и возвращать ноль.

for (kin_index, kin_row), (sub_index, sub_row) in zip(df1.iterrows(), df2.iterrows()):
    print(kin_index,sub_index)

Я хочу перебрать оба кадра данных, даже если один пуст.Это не проходит, если один из фреймов данных пуст.

1 Ответ

0 голосов
/ 28 сентября 2018

zip работает только до самой короткой итерации.Если одна из итераций пуста, вы не сможете итерировать никакие значения.

itertools.zip_longest итерирует до самой длинной итерации, но для того, чтобы это работало с распаковкой, вам нужно указать fillvalue какtuple длины 2:

from itertools import zip_longest

df1 = pd.DataFrame([[0, 1], [2, 3]])
df2 = pd.DataFrame()

zipper = zip_longest(df1.iterrows(), df2.iterrows(), fillvalue=(None, None))

for (idx1, row1), (idx2, row2) in zipper:
    print(idx1, idx2)

0 None
1 None

Но очень мало случаев, когда вам нужно будет повторять строки, подобные этой.На самом деле, этого следует избегать, если это вообще возможно.Вы должны рассмотреть возможность рефакторинга вашей логики для использования векторизованной функциональности.

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