遍歷pandas表格,以及zip官方文件
pandas 遍歷有以下三種訪法。
效能如下
.iterrows():在單獨的變數中返回索引和行專案,但顯著較慢
.itertuples():快於.iterrows(),但將索引與行專案一起返回,ir [0]是索引
zip:最快,但不能訪問該行的索引
用法如下:
t = pd.DataFrame({'a': range(0, 10000), 'b': range(10000, 20000)}) B = [] C = [] A = time.time() for i,r in t.iterrows(): C.append((r['a'], r['b'])) B.append(time.time()-A) C = [] A = time.time() for ir in t.itertuples(): C.append((ir[1], ir[2])) B.append(time.time()-A) C = [] A = time.time() for r in zip(t['a'], t['b']): C.append((r[0], r[1])) B.append(time.time()-A) print B
主要看zip的用法,之前見過這個函式幾次,中文解釋:
http://www.runoob.com/python/python-func-zip.html
Python zip() 函式
描述
zip() 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。
如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 * 號操作符,可以將元組解壓為列表。
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中為了減少記憶體,zip() 返回的是一個物件。如需展示列表,需手動 list() 轉換。
如果需要了解 Pyhton3 的應用,可以參考 Python3 zip()。
語法
zip 語法:
zip([iterable, ...])
引數說明:
- iterabl -- 一個或多個迭代器;
返回值
返回元組列表。
例項
以下例項展示了 zip 的使用方法:
>>>a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = zip(a,b) # 打包為元組的列表 [(1, 4), (2, 5), (3, 6)] >>> zip(a,c) # 元素個數與最短的列表一致 [(1, 4), (2, 5), (3, 6)] >>> zip(*zipped) # 與 zip 相反,*zipped 可理解為解壓,返回二維矩陣式 [(1, 2, 3), (4, 5, 6)]
python官方文件:
https://docs.python.org/3.7/library/functions.html#zip
zip()
in conjunction with the *
operator can be used to unzip a list:
>>>
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True
注意上面例子中*zip(x, y)作為zip()的引數,之前寫過*的用法,有一條是:
把元組值就作為星號引數的引數值:
singalStar("hello", *("world", 000))
相當於把元組(或者陣列)的元素提取出來,直接作為引數傳入函式:
singalStar("hello", "world", 000)
直觀上看就是*把元組的括號去掉了,相當於二者的作用抵消了。
另外,做了兩次zip變換又回到原點,zip的效果很像轉置(T)。