代码之家  ›  专栏  ›  技术社区  ›  Muhammad Zeeshan

当一个数据帧为空时,迭代两个数据帧错误

  •  1
  • Muhammad Zeeshan  · 技术社区  · 7 年前

    我一直在尝试迭代两次 熊猫数据帧 拉链 . 在两个数据帧中都有可用的值之前,它可以完美地工作。如果其中一个数据帧为空,则不会迭代并返回null。

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

    如果其中一个数据帧为空,则不会执行此操作。

    1 回复  |  直到 7 年前
        1
  •  1
  •   jpp    7 年前

    zip 只跑最短的距离。如果其中一个iterables为空,则无法迭代任何值。

    itertools.zip_longest fillvalue 作为一个 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
    

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