建议像在文件中那样迭代熊猫中的行的建议方法是什么?例如:
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())
虽然在熊猫中有内置的方法来做到这一点?
答案 0 :(得分:2)
您可以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
答案 1 :(得分:1)
您有values
,itertuples
和iterrows
,其中itertuples
在fast-pandas基准测试中表现最好。
答案 2 :(得分: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的行。要使用{{1}仅在非常特殊的情况下。否则,可以对解决方案进行矢量化处理。
我不知道您到底想达到什么目的,所以我只举了一个随机的例子。
答案 3 :(得分:1)
答案 4 :(得分:0)
如果必须遍历数据框,则应使用iterrows()
方法:
for index, row in df.iterrows():
...
答案 5 :(得分:0)
您可以使用x
从iterools.islice
中提取头n
项:
iterrows
答案 6 :(得分:0)
我知道其他人建议使用itlocrows,但还没有人建议将iloc与iterrows结合使用。这将允许您通过行号选择所需的行:
for i, row in df.iloc[:101].iterrows():
print(row)
尽管其他人已经指出,如果速度必不可少,那么应用功能或矢量化功能可能会更好。