*df.itertuples(index=False)
和 *[df.iloc[i] for i in range(df.shape[0])]
的效果是类似的,但并不完全一致。
*[df.iloc[i] for i in range(df.shape[0])]
:这段代码会返回一个列表,列表中的每个元素都是 DataFrame 的一行。每一行是一个 Series 对象,索引是列名。然后,*
运算符会将这个列表解包成单独的参数。*df.itertuples(index=False)
:这段代码会返回一个迭代器,迭代器中的每个元素都是一个元组,元组中的元素对应于 DataFrame 的一行。然后,*
运算符会将这个迭代器解包成单独的参数。
所以,虽然这两段代码都可以用来遍历 DataFrame 的行,但是它们返回的数据类型是不同的:前者返回的是 Series 对象,后者返回的是元组。
此外,*df.itertuples(index=False)
通常比 *[df.iloc[i] for i in range(df.shape[0])]
更高效,因为 itertuples
直接在 DataFrame 上进行迭代,而不需要通过 iloc
来获取每一行。希望这个解释能帮助你理解!