在 Python 中循环遍历数据帧的更优雅方式

对于一个可迭代对象,我们可以循环使用


for item in items:

但是,如果我并排有两个可迭代对象,例如,考虑一个带有 2 列的 Pandas 数据框。我可以使用上述方法循环遍历一列,但是有没有更优雅的方法同时循环遍历两列?


import pandas as pd

df = pd.DataFrame({'col 1': [1,2,3,4,5], 'col 2': [6,7,8,9,10]})

i = 0

for j in df['col 1']:

    print(j)

    print(df['col 2'][i])

    i += 1

谢谢!


蓝山帝景
浏览 217回答 3
3回答

侃侃尔雅

你的问题已经得到了一些很好的答案。但是,我还想为您提供一种完全不同的方法,它可能会更加优雅(取决于您的最终目标是什么)。作为一般经验法则,您希望避免遍历数据帧的行。这往往很慢,通常有更好的方法。尝试将您的想法转变为将函数应用于整个“向量”(数据框列的花哨词)。看一下这个:import pandas as pdimport numpy as npdf = pd.DataFrame({'col 1': [1,2,3,4,5], 'col 2': [6,7,8,9,10]})def sum_2_cols(col1,col2):    return col1 + col2df['new_col'] = np.vectorize(sum_2_cols)(df['col 1'], df['col 2'])该np.vectorize方法非常强大、灵活且快速。它允许您将自己的函数应用于数据帧,并且它的性能往往非常好。尝试一下,您可能会受到启发,以不同的方式解决您的问题。

手掌心

您可以遍历更优雅的整行:for index, row in df.iterrows():     print(row['col 1'], row['col 2'])

繁花不似锦

在zip内置函数创建iterables,无论你作为参数传递聚集,所以这应该是一种替代方案:import pandas as pddf = pd.DataFrame({'col 1': [1,2,3,4,5], 'col 2': [6,7,8,9,10]})for i,j in zip(df['col 1'], df['col 2']):    print(i)    print(j)输出:16273849510
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python