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

在Python中循环数据帧的更优雅的方式,python,pandas,Python,Pandas,对于一个iterable,我们可以使用 for item in items: 但是如果我有两个并排的iterable,比如说一个有两列的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)

对于一个iterable,我们可以使用

for item in items:
但是如果我有两个并排的iterable,比如说一个有两列的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
谢谢

使用该方法同时循环两列:

for i, j in df[['col 1', 'col 2']].itertuples(index=False):
    print(i)
    print(j)
使用该方法可同时在两列之间循环:

for i, j in df[['col 1', 'col 2']].itertuples(index=False):
    print(i)
    print(j)
zip内置函数可创建iterables,用于聚合作为参数传递的任何内容,因此这应该是一种替代方法:

import pandas as pd
df = 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)
输出:

1
6
2
7
3
8
4
9
5
10
zip内置函数可创建iterables,用于聚合作为参数传递的任何内容,因此这应该是一种替代方法:

import pandas as pd
df = 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)
输出:

1
6
2
7
3
8
4
9
5
10

您可以迭代整个行,这更为优雅:

for index, row in df.iterrows():
    print(row['col 1'], row['col 2'])

您可以迭代整个行,这更为优雅:

for index, row in df.iterrows():
    print(row['col 1'], row['col 2'])

你的问题已经有了很好的答案。然而,我也想为您提供一种完全不同的方法,根据您的最终目标,这种方法可能会更加优雅

一般来说,您希望避免在数据帧的行中循环。这往往是缓慢的,通常有更好的方法。尝试将您的想法转变为将一个函数应用于整个矢量数据帧列

看看这个:

import pandas as pd
import numpy as np

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

def sum_2_cols(col1,col2):
    return col1 + col2

df['new_col'] = np.vectorize(sum_2_cols)(df['col 1'], df['col 2'])

矢量化方法是非常强大、灵活和快速的。它允许您将自己的函数应用于数据帧,并且它的性能往往非常好。试一试,你可能会受到启发,开始用不同的方式解决问题。

你的问题已经有了一些很好的答案。然而,我也想为您提供一种完全不同的方法,根据您的最终目标,这种方法可能会更加优雅

一般来说,您希望避免在数据帧的行中循环。这往往是缓慢的,通常有更好的方法。尝试将您的想法转变为将一个函数应用于整个矢量数据帧列

看看这个:

import pandas as pd
import numpy as np

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

def sum_2_cols(col1,col2):
    return col1 + col2

df['new_col'] = np.vectorize(sum_2_cols)(df['col 1'], df['col 2'])

矢量化方法是非常强大、灵活和快速的。它允许您将自己的函数应用于数据帧,并且它的性能往往非常好。试一试,你可能会受到启发,开始用不同的方式解决你的问题。

zipdf['col1',df['col2']?这是一个XY问题。与其问我如何为我不想告诉你的某个问题实现这个可能很糟糕的解决方案,不如问解决我的问题的最佳方法是什么?一般来说,遍历Pandas数据帧应该是你最后的选择。有关详细信息,请参阅,但如果您发现自己在数据帧上循环,请停止并查看是否可以矢量化!为了得到更好的答案,我建议将问题的主题改为表示需要嵌套迭代的主题,而不仅仅是通常表示简单的一维迭代的循环。zipdf['col 1'],df['col 2']?这是一个XY问题。与其问我如何为我不想告诉你的某个问题实现这个可能很糟糕的解决方案,不如问解决我的问题的最佳方法是什么?一般来说,遍历Pandas数据帧应该是你最后的选择。有关详细信息,请参阅,但如果您发现自己在数据帧上循环,请停止并查看是否可以矢量化!为了得到更好的答案,我建议将问题的主题改为表示需要嵌套迭代的内容,而不仅仅是通常表示简单的一维迭代的循环。