像在文件中一样迭代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())
虽然在熊猫中有没有内置的方法来做到这一点?
你可以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
你有values
,itertuples
和iterrows
,其中itertuples
表现最好,以fast-pandas为基准。
既然你说你想要使用类似的东西,我会做以下事情:
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
。否则,可以对解决方案进行矢量化。
我不知道你到底想要实现什么,所以我只是随意举了一个例子。
如果必须遍历数据框,则应使用iterrows()
方法:
for index, row in df.iterrows():
...
你可以使用iterools.islice
从n
获取第一个iterrows
项目:
import itertools
limit = 5
for index, row in itertools.islice(df.iterrows(), limit):
...