猿问

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

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

我有一个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   c20  10  1001  11  1102  12  120

现在,我想迭代这个帧的行。对于每一行,我都希望能够通过列的名称访问其元素(单元格中的值)。例如:

for row in df.rows:
   print row['c1'], row['c2']

在熊猫身上可以这样做吗?

我发现了这个相似问题..但这并没有给出我想要的答案。例如,建议使用:

for date, row in df.T.iteritems():

for row in df.iterrows():

但我不明白row对象,以及我如何处理它。


回首忆惘然
浏览 2296回答 3
3回答

偶然的你

首先要考虑你是否真的需要迭代在DataFrame中的行。看见这个答案寻找其他选择。如果仍然需要对行进行迭代,则可以使用下面的方法。注意一些重要注意事项在其他任何答案中都没有提到。DataFrame.iterrow()for index, row in df.iterrows():     print row["c1"], row["c2"]DataFrame.itertuples()for row in df.itertuples(index=True, name='Pandas'):     print getattr(row, "c1"), getattr(row, "c2")itertuples()应该比iterrows()但请注意,根据医生的说法(目前熊猫为0.24.2):迭代:dtype可能不匹配每一行。因为迭代行为每一行返回一个序列,所以不保存跨行的dtype(数据框架的跨列保留dtype)。要在对行进行迭代时保留dtype,最好使用itertuples(),它返回值的namedtuple,并且通常比iterrow()快得多。迭代行:不要修改行你应该永远不要修改你正在迭代的东西。这并不能保证在所有情况下都能奏效。根据数据类型的不同,迭代器返回一个副本,而不是一个视图,对其进行写入将没有任何效果。使用DataFrame.Apply()相反:new_df = df.apply(lambda x: x * 2)迭代:如果列名是无效的Python标识符、重复的或以下划线开头,则列名将重命名为位置名称。对于大量列(>255),将返回常规元组。看见熊猫的迭代文档更多细节。

慕码人8056858

当iterrows()是个不错的选择,有时候itertuples()更快:df = pd.DataFrame({'a': randn(1000), 'b': randn(1000),'N': randint(100, 1000, (1000)), 'x': 'x'})%timeit [row.a * 2 for idx, row in df.iterrows()]# => 10 loops, best of 3: 50.3 ms per loop%timeit [row[1] * 2 for row in df.itertuples()]# => 1000 loops, best of 3: 541 µs per loop
随时随地看视频慕课网APP

相关分类

Python
我要回答