我正在从嵌套字典创建一个数据框,如下所示:
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/