我有一个来自熊猫的DataFrame:
import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df输出:
c1 c2
0 10 100
1 11 110
2 12 120现在我想遍历这个框架的各行。对于每一行,我希望能够通过列的名称访问它的元素(单元格中的值)。例如:
for row in df.rows:
print row['c1'], row['c2']在Pandas中可以做到这一点吗?
我找到了这个similar question。但它并没有给我我需要的答案。例如,建议在那里使用:
for date, row in df.T.iteritems():或
for row in df.iterrows():但是我不知道row对象是什么,也不知道如何使用它。
发布于 2013-05-10 15:07:59
DataFrame.iterrows是一个生成器,它同时生成索引和行(作为一个系列):
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'])10 100
11 110
12 120发布于 2016-12-08 00:41:29
首先,考虑是否确实需要遍历DataFrame中的行。有关替代方案,请参见this answer。
如果你仍然需要遍历行,你可以使用下面的方法。请注意中的一些重要注意事项,它们在任何其他答案中都没有提到。
对于索引,df.iterrows()中的行:print(行“c1”,行“c2”)
对于df.itertuples(index=True,name=‘Pandas’)中的行: print(row.c1,row.c2)
itertuples()应该比iterrows()快
但请注意,根据文档(目前为熊猫0.24.2 ):
dtype:行与行之间的可能不匹配
因为iterrows为每一行返回一个序列,所以它不跨行保留数据类型(对于DataFrames,跨列保留数据类型)。要在迭代行时保留数据类型,最好使用itertuples(),它返回值的命名元组,并且通常比iterrows()快得多
你不应该修改你正在迭代的东西,
。这并不能保证在所有情况下都能工作。根据数据类型的不同,迭代器返回的是副本而不是视图,写入该副本将没有任何效果。
请改用DataFrame.apply():
new_df = df.apply(lambda x: x * 2)如果
标识符无效、重复或以下划线开头,则列名称将重命名为位置名称。对于大量的列(>255),将返回常规元组。
有关更多详细信息,请参阅pandas docs on iteration。
发布于 2012-05-24 22:24:53
您应该使用df.iterrows()。虽然逐行迭代并不是特别有效,因为必须创建Series对象。
https://stackoverflow.com/questions/16476924
复制相似问题