【问题标题】:Create an object with string and number elements that can be sorted [duplicate]创建一个具有可以排序的字符串和数字元素的对象[重复]
【发布时间】:2020-02-09 06:59:13
【问题描述】:

我想创建一个矩阵,其元素是几列中的数字和其他列中的字符串。然后,我想根据包含数字的列之一中的数字对它们进行排序。我尝试使用 numpy 但它不起作用。最简单的方法是什么? Pandas、Tuple 还是其他?

import numpy as np
a=np.array([[10,'b'],[2,'z'],[4,'r']])
print(a)
print(np.sort(a))

输出:

array([['10', 'b'],
       ['2', 'z'],
       ['4', 'r']], dtype='<U11')

array([['10', 'b'],
       ['2', 'z'],
       ['4', 'r']], dtype='<U11')

它似乎已将数字转换为字符串。

【问题讨论】:

  • 你有使用 numpy 或 netsted 列表的矩阵吗?
  • @AkashPagar 我什么都没有。我想制作一个数据结构并用数字和字符串填充元素。在这里,我只是举例说明如果我选择 numpy 数组作为数据结构会发生什么。
  • 在docs.scipy.org/doc/numpy/reference/generated/numpy.array.html 阅读您的文档:a=np.array([(10,'b'),(2,'z'),(4,'r')],dtype='|i4, c')

标签: python python-3.x sorting data-structures


【解决方案1】:

-- 嗨,阿尔伯特,

由于您似乎有混合数据类型,我建议使用 pandas。

df = pd.DataFrame(
    data=[[10,'b'],[2,'z'],[4,'r']]
    , columns=['numbers', 'characters']
)

df.sort_values('numbers', ascending=False)

【讨论】:

    【解决方案2】:

    您也可以使用嵌套列表格式的矩阵,因此可以对第一个元素进行排序。在您的情况下,矩阵中的第一个元素是字符串整数,因此需要将其转换为整数进行排序。

    a = [['10', 'b'], ['2', 'z'], ['4', 'r']]
    print(a)
    a = sorted(a, key=lambda x: int(x[0]))
    print(a)
    

    输出:

    [['10', 'b'], ['2', 'z'], ['4', 'r']]
    [['2', 'z'], ['4', 'r'], ['10', 'b']]
    

    如果你想保留在 numpy 数组中,那么解决方案就是这个。

    a=np.array([[10,'b'],[2,'z'],[4,'r']])
    print(a)
    a = sorted(a, key=lambda x: int(x[0]))
    a = np.array(a)
    print(a)
    

    输出:

    [['10' 'b']
     ['2' 'z']
     ['4' 'r']]
    [['2' 'z']
     ['4' 'r']
     ['10' 'b']]
    

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 2014-12-23
      • 2021-07-12
      • 1970-01-01
      • 2021-05-14
      相关资源
      最近更新 更多