更优雅的方式来遍历Python中的数据框

时间:2019-02-14 18:57:41

标签: python pandas

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

for item in items:

但是,如果我有两个并排的iterables,那考虑一下有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

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以遍历整行,这更加优雅:

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

答案 1 :(得分:0)

使用DataFrame.itertuples()方法同时遍历两列:

for i, j in df[['col 1', 'col 2']].itertuples(index=False):
    print(i)
    print(j)

答案 2 :(得分:0)

zip内置函数创建可迭代对象,该可迭代对象聚合您作为参数传递的所有内容,因此这是替代方法:

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

答案 3 :(得分:0)

您已经对自己的问题有了一些很好的答案。但是,我还想为您提供一种完全不同的方法,该方法可能更加优雅(取决于您的最终目标)。

作为一般经验法则,您要避免循环遍历数据框的行。这往往很慢,通常有更好的方法。尝试将您的思维转变为将函数应用于整个“向量”(数据框列的花式单词)。

检查一下:

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'])

np.vectorize方法非常强大,灵活且快速。它允许您将自己的功能应用于数据框,并且往往表现得很好。尝试一下,您可能会得到启发,以其他方式解决问题。