python - 如何忽略 Pandas 重组字符串索引?

标签 python pandas

我正在从嵌套字典创建一个数据框,如下所示:

dict = {
  'Loop1': {
    'pv': 1, 'sp': 2, 'op': 3, 'string_mode': 4, 'auto_mode': 5, 'cascade_mode': 'NaN', 'operational': 6, 'operational_min': 1.0, 'operational_max': 10.0
  },
  'Loop2': {
    'pv': 7, 'sp': 8, 'op': 9, 'string_mode': 10, 'auto_mode': 11, 'cascade_mode': 'NaN', 'operational': 12, 'operational_min': 1.0, 'operational_max': 10.0
  }
}

当我使用df = pd.DataFrame(dict)时,我得到以下输出:

                      Loop1    Loop2  
    auto_mode          5        11           
    cascade_mode       NaN     NaN          
    op                 3        9      
    operational        6        12         
    operational_max   10.0     10.0            
    operational_min   1.0      1.0      
    pv                 1       7   
    sp                 2       8        
    string_mode        4       10    

正如您所看到的,数据框的索引会自动按字母顺序重新组织。

有什么方法可以阻止 Pandas 自动重新组织索引,以便保留字典中的顺序吗?

注意: 我尝试使用 pandas.DataFrame.sort_index(dict, inplace=True) 并收到以下错误:

AttributeError: 'dict' object has no attribute '_get_axis_number'

任何帮助将不胜感激!

最佳答案

下面的代码片段将为您提供一个数据帧,其索引的排序方式与字典 Loop1 的键相同,这似乎就是您想要的。

代码:

import pandas as pd
d = {'Loop1': {'pv': 1, 'sp': 2, 'op': 3, 'string_mode': 4, 'auto_mode': 5, 'cascade_mode': 'NaN', 'operational': 6, 'operational_min': 1.0, 'operational_max': 10.0}, 'Loop2': {'pv': 7, 'sp': 8, 'op': 9, 'string_mode': 10, 'auto_mode': 11, 'cascade_mode': 'NaN', 'operational': 12, 'operational_min': 1.0, 'operational_max': 10.0}}
order = list(d['Loop1'].keys())

df=pd.DataFrame(d)
df = df.T[order].T
df

输出:

                Loop1 Loop2
pv                  1     7
sp                  2     8
op                  3     9
string_mode         4    10
auto_mode           5    11
cascade_mode      NaN   NaN
operational         6    12
operational_min     1     1
operational_max    10    10

如您所见,我已将您的 dict 重命名为 d,因为 dict() 本身就是一个 Python 函数。由于您的数据样本以 'Loop3':......et 结尾,因此我只获取了样本的一个子集。

有一种非常简单的方法来定义 pandas 数据帧的的顺序。当涉及到行时就不那么重要了。因此,我在这里所做的就是转置您的初始数据帧,将列顺序定义为与字典的键顺序相同,然后将其转回原来的位置,以便行(或索引)最终出现在所需的订单。

关于python - 如何忽略 Pandas 重组字符串索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60063683/

相关文章:

python - 在 Pandas 中,选择标签包含指定级别的给定字符串的所有列

python - Pandas 使用 For 循环分配值时出现 KeyError

python - 更改 Pandas 列中的类别?

python - 使用 Stargate Rest 将数据插入 Hbase

python - 从元组列表生成邻接矩阵的更优雅的方法

python - 无法在 Ubuntu Wily 上运行 Kivy

python - PyYAML 未解析所有示例

python - 查询hdf5日期时间列

Python Pandas 将列从一张纸复制到另一张纸而不更改任何数据?

python - 如何用最少的代码创建过滤后的 DataFrame