我一直在尝试使用 zip 迭代两个 pandas数据帧。直到我在两个数据帧中都有可用值之前,它才能完美工作。如果数据框之一为空,则不会迭代并返回null。
for (kin_index, kin_row), (sub_index, sub_row) in zip(df1.iterrows(), df2.iterrows()):
print(kin_index,sub_index)
我想迭代两个数据帧,即使其中一个为空。 如果其中一个数据框为空,则不会执行此操作。
答案 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
但是很少有需要迭代这样的行的情况。实际上,应尽可能避免。您应该考虑重构逻辑以使用矢量化功能。