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