我已经将SQL(MySQLdb)查询的结果加载到一个numpy结构化数组中。我现在想以各种方式对数组进行排序。字段是字符串、int、float和python对象的混合包(对于NULLS返回的列)。我已经研究过这个问题,但正如askewchan在答案底部提到的那样,它不适用于字符串,似乎也不适用于python对象(例如int,但来自NULLS列)。
是否有一种方法可以通过一个或多个可能是非数字类型的字段对一个一维结构化数组进行排序,这些字段可以独立地改变它们的方向(升序/降序)。基本上,我正在寻找类似SQL的ORDERBY子句的内容。
正如他在回答中所说:
假设你的所有值都是数字的(因为负数不会反转字符串排序)
您可以做的事情是将数据转换为pandas DataFrame。由于您的数据已经在NumPy数组中,Panda不会对您的数据进行任何复制,它会重用您的数据结构,因此此操作非常便宜。之后你可以做一些事情,比如:
>>> a = np.array([(4, 'GE'), (1,'RE'), (1,'AE'), (4,'CD')],
dtype=[('x', 'i4'), ('y', 'S2')])
>>> df = pd.DataFrame(a)
>>> df.sort(['x', 'y'], ascending=[0,1])
x y
3 4 CD
0 4 GE
2 1 AE
1 1 RE
>>> df.sort(['x', 'y'], ascending=[0,0])
x y
0 4 GE
3 4 CD
1 1 RE
2 1 AE
>>> df.sort(['y', 'x'], ascending=[1,0])
x y
2 1 AE
3 4 CD
0 4 GE
1 1 RE
>>> df.sort(['y', 'x'], ascending=[0,0])
x y
1 1 RE
0 4 GE
3 4 CD
2 1 AE