0

我已将 SQL (MySQLdb) 查询的结果加载到 numpy 结构化数组中。我现在想以各种方式对数组进行排序。这些字段是字符串、整数、浮点数和 python 对象的混合包(对于返回 NULLS 的列)。我已经看过这个问题,但正如 askewchan 在他的答案底部提到的那样,它不适用于字符串,它似乎也不适用于 python 对象(例如整数,但来自具有 NULLS 的列)。

有没有办法通过一个或多个可能是非数字类型的字段来对一维结构化数组进行排序这些字段可以独立地改变它们的方向(升序/降序)。基本上,我正在寻找类似于 SQL 的“ORDER BY”子句的东西。

4

1 回答 1

0

正如他在回答中所说:

假设您的所有值都是数字的,这可行(因为负数不会反转字符串排序)

您可以做的就是将您的数据转换为 pandas DataFrame。由于您已经将数据保存在 NumPy 数组中,pandas 不会对您的数据进行任何复制,它将重用您的数据结构,因此此操作非常便宜。之后,您可以执行以下操作:

>>> 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
于 2013-08-17T10:28:24.230 回答