首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Pandas中遍历DataFrame中的行

如何在Pandas中遍历DataFrame中的行
EN

Stack Overflow用户
提问于 2013-05-10 15:04:50
回答 31查看 4.5M关注 0票数 3.1K

我有一个来自熊猫的DataFrame

代码语言:javascript
运行
复制
import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df

输出:

代码语言:javascript
运行
复制
   c1   c2
0  10  100
1  11  110
2  12  120

现在我想遍历这个框架的各行。对于每一行,我希望能够通过列的名称访问它的元素(单元格中的值)。例如:

代码语言:javascript
运行
复制
for row in df.rows:
   print row['c1'], row['c2']

在Pandas中可以做到这一点吗?

我找到了这个similar question。但它并没有给我我需要的答案。例如,建议在那里使用:

代码语言:javascript
运行
复制
for date, row in df.T.iteritems():

代码语言:javascript
运行
复制
for row in df.iterrows():

但是我不知道row对象是什么,也不知道如何使用它。

EN

回答 31

Stack Overflow用户

回答已采纳

发布于 2013-05-10 15:07:59

DataFrame.iterrows是一个生成器,它同时生成索引和行(作为一个系列):

代码语言:javascript
运行
复制
import pandas as pd

df = pd.DataFrame({'c1': [10, 11, 12], 'c2': [100, 110, 120]})

for index, row in df.iterrows():
    print(row['c1'], row['c2'])
代码语言:javascript
运行
复制
10 100
11 110
12 120
票数 4.1K
EN

Stack Overflow用户

发布于 2016-12-08 00:41:29

首先,考虑是否确实需要遍历DataFrame中的行。有关替代方案,请参见this answer

如果你仍然需要遍历行,你可以使用下面的方法。请注意中的一些重要注意事项,它们在任何其他答案中都没有提到。

  • DataFrame.iterrows()

对于索引,df.iterrows()中的行:print(行“c1”,行“c2”)

  • DataFrame.itertuples()

对于df.itertuples(index=True,name=‘Pandas’)中的行: print(row.c1,row.c2)

itertuples()应该比iterrows()

但请注意,根据文档(目前为熊猫0.24.2 ):

  • dtype:行与行之间的

可能不匹配

因为iterrows为每一行返回一个序列,所以它不跨行保留数据类型(对于DataFrames,跨列保留数据类型)。要在迭代行时保留数据类型,最好使用itertuples(),它返回值的命名元组,并且通常比iterrows()快得多

  • iterrows: Do not modify rows

你不应该修改你正在迭代的东西,

。这并不能保证在所有情况下都能工作。根据数据类型的不同,迭代器返回的是副本而不是视图,写入该副本将没有任何效果。

请改用DataFrame.apply()

代码语言:javascript
运行
复制
    new_df = df.apply(lambda x: x * 2)

  • itertuples:

如果

标识符无效、重复或以下划线开头,则列名称将重命名为位置名称。对于大量的列(>255),将返回常规元组。

有关更多详细信息,请参阅pandas docs on iteration

票数 490
EN

Stack Overflow用户

发布于 2012-05-24 22:24:53

您应该使用df.iterrows()。虽然逐行迭代并不是特别有效,因为必须创建Series对象。

票数 230
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16476924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档