3 回答
TA贡献1841条经验 获得超3个赞
for index, row in df.iterrows(): print row["c1"], row["c2"]
for row in df.itertuples(index=True, name='Pandas'): print getattr(row, "c1"), getattr(row, "c2")
itertuples()
iterrows()
迭代: dtype
可能不匹配每一行。 因为迭代行为每一行返回一个序列,所以 不保存跨行的dtype(数据框架的跨列保留dtype)。要在对行进行迭代时保留dtype,最好使用itertuples(),它返回值的namedtuple,并且通常比iterrow()快得多。 迭代行:不要修改行 你应该 永远不要修改你正在迭代的东西。这并不能保证在所有情况下都能奏效。根据数据类型的不同,迭代器返回一个副本,而不是一个视图,对其进行写入将没有任何效果。 使用 DataFrame.Apply() 相反: new_df = df.apply(lambda x: x * 2)
迭代: 如果列名是无效的Python标识符、重复的或以下划线开头,则列名将重命名为位置名称。对于大量列(>255),将返回常规元组。
TA贡献1803条经验 获得超6个赞
当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
添加回答
举报