1. 程式人生 > >遍歷pandas表格,以及zip官方文件

遍歷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() 函式

Python 內建函式 Python 內建函式


描述

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)。