Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当一个数据帧为空时,迭代两个数据帧错误_Python_Pandas_Dataframe_Iterator - Fatal编程技术网

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

Python 当一个数据帧为空时,迭代两个数据帧错误,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仅在最短的数据框内运行。如果其中一

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

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考虑使之成为可能,但我正在寻找一个合适的解决方案。