Python 当一个数据帧为空时,迭代两个数据帧错误
我一直在尝试使用zip迭代两个数据帧。在两个数据帧中都有可用的值之前,它可以完美地工作。如果其中一个数据帧为空,则不会迭代并返回nullPython 当一个数据帧为空时,迭代两个数据帧错误,python,pandas,dataframe,iterator,Python,Pandas,Dataframe,Iterator,我一直在尝试使用zip迭代两个数据帧。在两个数据帧中都有可用的值之前,它可以完美地工作。如果其中一个数据帧为空,则不会迭代并返回null for (kin_index, kin_row), (sub_index, sub_row) in zip(df1.iterrows(), df2.iterrows()): print(kin_index,sub_index) 我想迭代两个数据帧,即使其中一个是空的。 如果其中一个数据框为空,则不会执行此操作。zip仅在最短的数据框内运行。如果其中一
for (kin_index, kin_row), (sub_index, sub_row) in zip(df1.iterrows(), df2.iterrows()):
print(kin_index,sub_index)
我想迭代两个数据帧,即使其中一个是空的。
如果其中一个数据框为空,则不会执行此操作。
zip
仅在最短的数据框内运行。如果其中一个iterable为空,则无法迭代任何值
itertools.zip\u longest
迭代到最长的iterable,但为了确保这在解包时有效,您需要将fillvalue
指定为长度为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
但是,很少有情况需要像这样迭代行。事实上,如果可能的话,应该避免这样做。你应该考虑重构你的逻辑来使用矢量化的功能。所以你想先迭代第一个,然后再迭代第二个?因为现在它确实有意义。如果其中一个为空,则不能“并发”迭代这两个值。实际上,我希望从这两个值中逐个取值。第一个来自df1,第一个来自df2,第二个来自df1,第二个来自df2。如果其中一个是空的,我可以从另一个取值。我可以用很少的if考虑使之成为可能,但我正在寻找一个合适的解决方案。