2017-06-12 42 views
1

查询集如下所示:转换Django的查询集到大熊猫数据帧和维护列顺序

qs = A.objects.all().values_list('A', 'B', 'C', 'D', 'E', 'F') 

我可以在我的QS转换为大熊猫数据帧容易:

df = pd.DataFrame.from_records(qs.values('A', 'B', 'C', 'D', 'E', 'F')) 

但是,列订单不被维护。转换后,我立即需要指定列的新秩序,我不明白为什么:

df = df.columns['B', 'F', 'C', 'E', 'D', 'A'] 

为什么会这样,我能做些什么不同,以避免明确设置数据框列?

回答

1

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

尝试:

df = pd.DataFrame.from_records(
    A.objects.all().values_list('A', 'B', 'C', 'D', 'E', 'F') 
) 

检查docs约Django的查询集

1

尝试:

df = pd.DataFrame.from_records("DATA_GOES_HERE", columns=['A','B','C'.. etc.) 

我使用columns=参数found here

我相信你也可以通过使用pd.DataFrame来构造DataFrame,并将你的列表与相应的列名放在那里。这可能是更多的人工前期工作,但如果这是自动化工作,它也可以工作。 (可能再次遇到此问题,但可以通过重新安排列来轻松解决问题。再次,可能会提前做更多工作)