为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蓝山帝景 2021-11-09 14:58:45
对于一个可迭代对象,我们可以循环使用for item in items:但是,如果我并排有两个可迭代对象,例如,考虑一个带有 2 列的 Pandas 数据框。我可以使用上述方法循环遍历一列,但是有没有更优雅的方法同时循环遍历两列?import pandas as pddf = pd.DataFrame({'col 1': [1,2,3,4,5], 'col 2': [6,7,8,9,10]})i = 0for j in df['col 1']:    print(j)    print(df['col 2'][i])    i += 1谢谢!
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

你的问题已经得到了一些很好的答案。但是,我还想为您提供一种完全不同的方法,它可能会更加优雅(取决于您的最终目标是什么)。


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


看一下这个:


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方法非常强大、灵活且快速。它允许您将自己的函数应用于数据帧,并且它的性能往往非常好。尝试一下,您可能会受到启发,以不同的方式解决您的问题。


查看完整回答
反对 回复 2021-11-09
?
手掌心

TA贡献1942条经验 获得超3个赞

您可以遍历更优雅的整行:

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


查看完整回答
反对 回复 2021-11-09
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

在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


查看完整回答
反对 回复 2021-11-09
  • 3 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信