3 回答

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
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
可能不匹配每一行。 因?yàn)榈袨槊恳恍蟹祷匾粋€(gè)序列,所以 不保存跨行的dtype(數(shù)據(jù)框架的跨列保留dtype)。要在對(duì)行進(jìn)行迭代時(shí)保留dtype,最好使用itertuples(),它返回值的namedtuple,并且通常比iterrow()快得多。 迭代行:不要修改行 你應(yīng)該 永遠(yuǎn)不要修改你正在迭代的東西。這并不能保證在所有情況下都能奏效。根據(jù)數(shù)據(jù)類(lèi)型的不同,迭代器返回一個(gè)副本,而不是一個(gè)視圖,對(duì)其進(jìn)行寫(xiě)入將沒(méi)有任何效果。 使用 DataFrame.Apply() 相反: new_df = df.apply(lambda x: x * 2)
迭代: 如果列名是無(wú)效的Python標(biāo)識(shí)符、重復(fù)的或以下劃線開(kāi)頭,則列名將重命名為位置名稱(chēng)。對(duì)于大量列(>255),將返回常規(guī)元組。

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
當(dāng)iterrows()是個(gè)不錯(cuò)的選擇,有時(shí)候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
添加回答
舉報(bào)