Pandas按行遍历DataFrame的3种方法

举报
北山啦 发表于 2021/06/16 15:15:45 2021/06/16
【摘要】 Pandas按行遍历DataFrame的3种方法

Pandas按行遍历DataFrame的3种方法

image.png

import pandas as pd
import numpy as np
import collections
df = pd.DataFrame(
    np.random.random(size=(100000, 4)), 
    columns=list('ABCD')
)
df.head(3)
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
A B C D
0 0.897179 0.704997 0.419893 0.457423
1 0.307077 0.575940 0.719469 0.064899
2 0.018989 0.394548 0.631148 0.439461
df.shape
(100000, 4)

1. df.iterrows()

使用方式

for idx, row in df.iterrows():
    print(idx, row)
    print(idx, row["A"], row["B"], row["C"], row["D"])
    break
0 A    0.897179
B    0.704997
C    0.419893
D    0.457423
Name: 0, dtype: float64
0 0.8971793669135368 0.7049968562422332 0.419892758556462 0.45742342531816327

时间耗费

%%time
result = collections.defaultdict(int)
for idx, row in df.iterrows():
    result[(row["A"], row["B"])] += row["A"] + row["B"]
Wall time: 8.43 s

2. df.itertuples()

使用方式

for row in df.itertuples():
    print(row)
    print(row.Index, row.A, row.B, row.C, row.D)
    break

Pandas(Index=0, A=0.8971793669135368, B=0.7049968562422332, C=0.419892758556462, D=0.45742342531816327)
0 0.8971793669135368 0.7049968562422332 0.419892758556462 0.45742342531816327

时间耗费

%%time
result = collections.defaultdict(int)
for row in df.itertuples():
    result[(row.A, row.B)] += row.A + row.B

Wall time: 327 ms

3. for+zip

使用方式

# 既不需要类型检查,也不需要构建namedtuple
# 缺点是需要挨个指定变量
for A, B in zip(df["A"], df["B"]):
    print(A, B)
    break
0.8971793669135368 0.7049968562422332

时间耗费

%%time
result = collections.defaultdict(int)
for A, B in zip(df["A"], df["B"]):
    result[(A, B)] += A + B
Wall time: 166 ms

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。