如何迭代pandas dataframe的行

2021-09-09 04:34:12 字數 1573 閱讀 4042

from:

在對dataframe進行操作時,我們不可避免的需要逐行檢視或運算元據,那麼有什麼高效、快捷的方法呢?

import pandas as pd

inp = [, , ] df = pd.dataframe(inp) for x in xrange(len(df.index)): print df['c1'].iloc[x]

這似乎是最常規的辦法,而且可以在迭代的過程中對dataframe進行操作。

for i, row in enumerate(df.values):

index= df.index[i]

print row

df.values 是 numpy.ndarray 型別

這裡 i 是index的序號, row是numpy.ndarray型別。

import pandas as pd

inp = [, , ] df = pd.dataframe(inp) for index, row in df.iterrows(): print row['c1'], row['c2'] #10 100 #11 110 #12 120

df.iterrows() 的每次迭代都是乙個tuple型別,包含了index和每行的資料。

採用iterrows的方法,得到的 row 是乙個series,dataframe的dtypes不會被保留。

返回的series只是乙個原始dataframe的複製,不可以對原始dataframe進行修改;

import pandas as pd

inp = [, , ] df = pd.dataframe(inp) for row in df.itertuples(): # print row[0], row[1], row[2] 等同於 print row.index, row.c1, row.c2

itertuples 返回的是乙個 pandas.core.frame.pandas 型別。

普遍認為itertuples 比 iterrows的速度要快。

zip 和 itertools.izip的用法是相似的, 但是zip返回乙個list,而izip返回乙個迭代器。 如果資料量很大,zip的效能不及izip

from itertools import izip

import pandas as pd

inp = [, , ] df = pd.dataframe(inp) for row in izip(df.index, df['c1'], df['c2']): print row

import time

from numpy.random import randn

可以發現在時間花銷上, izip > zip > itertuples > enumerate > iterrows > range(index)

如何使用迭代器迭代集合

iterator 迭代器是乙個專門用來遍歷集合使用的類,迭代器需要通過 集合物件.iterator 方法獲得。迭代器物件使用 hashnext 方法 檢視是否還有可以迭代的元素,使用next 方法返回迭代器中的物件。迭代器返回的物件預設都是object型別。set集合的遍歷 1.通過set集合呼叫i...

測試array的迭代效率(如何選取迭代順序)

乙個函式有兩個輸入量,乙個算術複雜度高,乙個算術複雜度低,你會把哪個放到外迴圈,哪個放到內迴圈?想想也知道應該把算術複雜度低的放到內迴圈,因為每次外迴圈迭代,內迴圈就要計算一次。如果是用array型別,那麼內迴圈就省了 可以直接計算數值 那麼應該迭代複雜度高的量,還是複雜度低的量?但是剛剛睡午覺的時...

python迭代 如何對迭代器做切片操作

問題舉例 讀取某個檔案內容的100 300行內容,我們是否可以使用 類似列表切片的方式得到乙個100 300行檔案內容的生成器 列表的切片操作其實是在過載方法 getitem 方法 可以通過file.readlines 後再做切片,記憶體會載入整個檔案到記憶體,如果檔案太大,會浪費記憶體空間 使用i...