将 Django QuerySet 转换为 Pandas Dataframe 并保持列顺序

jhe*_*ger 7 django pandas

给定一个 Django 查询集,如下所示:

qs = A.objects.all().values_list('A', 'B', 'C', 'D', 'E', 'F')
Run Code Online (Sandbox Code Playgroud)

我可以轻松地将我的 qs 转换为 Pandas 数据帧:

df = pd.DataFrame.from_records(qs.values('A', 'B', 'C', 'D', 'E', 'F'))
Run Code Online (Sandbox Code Playgroud)

但是,不会维护列顺序。转换后,我需要立即指定新的列顺序,但我不清楚原因:

df = df.columns['B', 'F', 'C', 'E', 'D', 'A']
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我可以做些什么不同的事情来避免显式设置数据框列?

alf*_*kim 6

qs.values()将 QuerySet 转换为无序的字典。您可以使用qs.values_list(),它返回一个元组列表。

尝试:

df = pd.DataFrame.from_records(
    A.objects.all().values_list('A', 'B', 'C', 'D', 'E', 'F')
)
Run Code Online (Sandbox Code Playgroud)

检查有关 Django 的 QuerySets的文档