【问题标题】:Python pandas automatically sorts columnsPython pandas 自动对列进行排序
【发布时间】:2017-05-28 22:16:12
【问题描述】:

我从 pandas 数据框创建了一个 csv 文件,其中包含许多列用于我们的 ERP 系统。大多数列是空的或常量,但系统的importtool需要一个具有指定列顺序的csv文件。

创建数据框时,我有类似的东西:

importlist = pd.DataFrame({ 'A': 'TestA',
                            'C': some values,
                            'B': '0'})

当我打印列表时,列的顺序是 A、B、C。

有没有办法防止自动排序?我知道我可以再次手动对列进行排序,但我认为这不是一个很好的解决方案,因为大约有 50 列。

【问题讨论】:

  • 你真的会创建这样的数据框还是从文本文件或数据库中读取数据源?
  • 我必须像这样创建一个 DataFrame。这是我们 ERP 系统中导入的 pcb 材料清单。

标签: python pandas


【解决方案1】:

为了完整起见,您还可以使用 OrderedDict 传递两个元素元组的列表,其中元组的第一个元素是列名,第二个元素是值列表。

pd.DataFrame(OrderedDict([('A',['TestA', 'TestB']), 
                          ('C', ['Some Item', 'Other Item']),
                         ('B',[0, 1])]))

       A           C  B
0  TestA   Some Item  0
1  TestB  Other Item  1

【讨论】:

    【解决方案2】:

    您需要传递参数columns 以及所需顺序的列列表,因为默认的python dict 是未排序的:

    importlist = pd.DataFrame({ 'A': 'TestA',
                            'C': some values,
                            'B': '0'}, columns = ['A','C','B'])
    

    示例:

    importlist = pd.DataFrame({ 'A': ['TestA'],
                                'C':  [4],
                                'B': ['0']}, columns = ['A','C','B'])
    
    print (importlist)
           A  C  B
    0  TestA  4  0
    

    如果可能,或者使用read_csv 读取csv。

    在docs 中是另一种创建DataFrames 的方法,其中之一是 DataFrame.from_items:

    a = ['TestA','TestB']
    b = ['0', '7']
    c = [4,7]
    
    print (pd.DataFrame.from_items([('A', a), ('C', c),('B', b)]))
           A  C  B
    0  TestA  4  0
    1  TestB  7  7
    

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 2021-12-01
      • 1970-01-01
      • 2018-03-15
      • 2021-09-02
      • 2020-09-12
      • 2019-12-06
      • 2022-11-29
      相关资源
      最近更新 更多