迭代pandas中的前N行

问题描述 投票:4回答:6

像在文件中一样迭代pandas中的行的建议方法是什么?例如:

LIMIT = 100
for row_num, row in enumerate(open('file','r')):
    print (row)
    if row_num == LIMIT: break

我想做的事情如下:

for n in range(LIMIT):
    print (df.loc[n].tolist())

虽然在熊猫中有没有内置的方法来做到这一点?

python pandas
6个回答
3
投票

你可以islice迭代器iterrows(或itertuples)产生。

from itertools import islice
LIMIT = 100

# iterrows and unpacking
for idx, data in islice(df.iterrows(), LIMIT):
    # do stuff

# itertuples, no unpacking
for row in islice(df.itertuples(), LIMIT):
    # do stuff

2
投票

没有人回答这个简单的解决方案吗?

for row in df.head(5).itertuples():
    # do something

快来看看this post吧。


1
投票

你有valuesitertuplesiterrows,其中itertuples表现最好,以fast-pandas为基准。

enter image description here


1
投票

既然你说你想要使用类似的东西,我会做以下事情:

limit = 2
df = pd.DataFrame({"col1": [1,2,3], "col2": [4,5,6], "col3": [7,8,9]})
df[:limit].loc[df["col3"] == 7]

这将选择数据框的前两行,然后返回前两行中具有col3值等于7的行。点是您想要仅在非常特定的情况下使用iterrows。否则,可以对解决方案进行矢量化。

我不知道你到底想要实现什么,所以我只是随意举了一个例子。


0
投票

如果必须遍历数据框,则应使用iterrows()方法:

for index, row in df.iterrows():
    ...

0
投票

你可以使用iterools.islicen获取第一个iterrows项目:

import itertools
limit = 5
for index, row in itertools.islice(df.iterrows(), limit):
    ...
© www.soinside.com 2019 - 2024. All rights reserved.