我需要遍历pandas数据帧的行。由于为每一行创建了一个Series对象,因此“native pandas”迭代相当慢,所以我决定迭代底层的ndarray行。
用于说明程序的伪代码:
import pandas as pd
import numpy as np
store = pd.HDFStore('example.h5')
df = pandas.store[name]
df = df[10:20]
result = np.apply_along_axis(mapped_function, axis=1, arr=df[['colA', 'colC', 'colG']].values)
问题是有点不可预测,我偶尔会收到如下错误:
Traceback (most recent call last):
File "C:\Documents and Settings\Example User\My Documents\Example Directory\modul
e1.py", line 15, in <module>
module2.main()
File "C:\Documents and Settings\Example User\My Documents\Example Directory\dir1\module2.py", line 183, in main
result = np.apply_along_axis(mapped_function, axis=1, arr=df[['colA', 'colC', 'colG']].values)
File "C:\Anaconda\lib\site-packages\numpy\lib\shape_base.py", line 129, in app
ly_along_axis
outarr[tuple(i.tolist())] = res
ValueError: cannot copy sequence with size 7 to array axis with dimension 11
在我的情况下,在映射第13行之后或映射第14行之前发生此错误。在任何情况下,mapped_function
永远不会以第14行作为参数执行,但在之前失败。
如果我在上面的代码中将df = df[10:20]
更改为df = df[13:20]
,那么有问题的行会查找相同的数据!
另外,如果我完全避免apply_along_axis
并进行python迭代,那么一切都运行良好:
result = []
for row in df = df[10:20]:
result += [mapped_function(row)]
因此看来,mapped_function
没有错,但不知何故apply_along_axis
似乎正在经历恐慌。不幸的是,我没有运气诊断原因......
以前有人遇到过这个问题吗?