当一个数据框为空时,迭代两个熊猫数据框错误

时间:2018-09-28 10:38:05

标签: python pandas dataframe iterator

我一直在尝试使用 zip 迭代两个 pandas数据帧。直到我在两个数据帧中都有可用值之前,它才能完美工作。如果数据框之一为空,则不会迭代并返回null。

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

我想迭代两个数据帧,即使其中一个为空。 如果其中一个数据框为空,则不会执行此操作。

1 个答案:

答案 0 :(得分:1)

zip仅在最短的迭代时间内运行。如果其中一个可迭代对象为空,则将无法迭代任何值。

itertools.zip_longest迭代到最长的迭代,但是要确保此操作与解压缩一起工作,您需要将fillvalue指定为长度2的tuple

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

但是很少有需要迭代这样的行的情况。实际上,应尽可能避免。您应该考虑重构逻辑以使用矢量化功能。