如何將django QuerySet轉換爲numpy記錄數組? PS:我知道你可以迭代和構造它,但是還有其他更清潔的解決方案嗎?如何將django QuerySet轉換爲numpy記錄數組?
回答
我一直在尋找:
從查詢集QS得到vlqs(django.db.models.query.ValuesListQuerySet)
vlqs = qs.values_list()
隱蔽vlqs列出
MYLIST =列表(vlqs)
創建numpy的記錄陣列
R = np.core.records.array(MYLIST,名稱= 'FIELD1,FIELD2,字段3')//名稱是模型字段
這就像問「我如何將冰箱的內容轉換成晚餐?」。這取決於你的冰箱裏有什麼,以及你想吃什麼。簡短的回答(相當於說「通過烹飪」)是迭代查詢集,構建任何你想實例化數組的對象(通常是一個迭代和一個字典)。長的答案取決於你想要達到的目標。
import numpy as np
qs = MyModel.objects.all()
vlqs = qs.values_list()
r = np.core.records.fromrecords(vlqs, names=[f.name for f in MyModel._meta.fields])
此用途QuerySet迭代器直接避免了創建python列表的時間和垃圾浪費步驟。它還使用MyModel._meta.fields從模型中獲取實際字段名稱,如Get model's fields in Django
中所解釋的如果您只想將單個字段(例如模型的「票數」字段)提取爲一維數組,你可以這樣做:
vlqs = qs.values_list('votes', flat=True)
votes = np.fromiter(vlqs, numpy.dtype('int_'))
這是一個很好的例子!其他窺視:請注意flat = True非常重要,以便values_list中的值是簡單的值而不是元組:https://docs.djangoproject.com/en/1.8/ref/models/querysets/#values-list – 2015-09-19 17:23:14
你可以做的是:
[index[0] for index in qs.values_list('votes')]
,並準備... XD
請問指數[0]在做什麼? – 2015-09-19 17:24:47
如果你想要讓所有的對象和CRE的吃得對象numpy的數組作爲數組的元素:
import numpy as np
qs = MyModel.objects.all()
numpy_array = np.array(list(qs))
根據我的工作,我用如下的內容:陣列的
import numpy as np
qs = MyModel.objects.values_list('id','first_name','last_name').filter(gender='male').order_by('id')
numpy_array = np.array(list(qs))
行對應於記錄和陣列的列對應的數值是我在上面定義了(id,名字,姓氏)。
並把它變成一個整潔的小功能,您只需通過任何Django的查詢集:
import pandas as pd
import numpy as np
def qs_to_df(qs):
""" QuerySet to DataFrame """
Model = qs.model
np_array = np.core.records.fromrecords(qs.values_list(), names=[f.name for f in Model._meta.fields])
return pd.DataFrame(np_array)
都會響起@CpILL的答案,你可以把大部分的查詢集成numpy的記錄陣列像這樣:
def qs_to_ra(qs, *args):
"""
Turn most querysets directly into a numpy record array
:param qs: django queryset
:param args: takes a list of field names to specify
:return: numpy.recarray
"""
model = qs.model
if args:
return np.core.records.fromrecords(qs.values_list(*args), names=args)
return np.core.records.fromrecords(qs.values_list(), names=[f.name for f in model._meta.fields])
您也可以將它們直接進入熊貓數據幀像這樣:
def qs_to_df(qs, *args):
"""
Turn most querysets directly into a pandas dataframe.
:param qs: django queryset
:param args: takes a list of field names to specify
:return: pandas.DataFrame
"""
model = qs.model
if args:
return pd.DataFrame.from_records(list(qs.values_list(*args)), columns=args)
return pd.DataFrame.from_records(list(qs.values_list()), columns=[f.name for f in model._meta.fields])
- 1. 將numpy數組轉換爲numpy記錄數組
- 2. 如何將此SQL轉換爲Django QuerySet?
- 3. 如何將itertools.chain轉換爲numpy數組?
- 4. 如何將CvMat轉換爲Numpy數組?
- 5. 如何將TFRecords轉換爲numpy數組?
- 6. 我如何使用numpy將數組轉換爲數組數組
- 7. Python將numpy數組轉換爲元組
- 8. 將numpy數組轉換爲元組
- 9. 如何有效地轉換numpy記錄數組中的日期?
- 10. 將numpy數組值轉換爲整數
- 11. 將數據幀轉換爲numpy數組?
- 12. 如何有效地將2d numpy數組轉換爲1d numpy元組數組?
- 13. 如何將一系列數組轉換爲2D numpy數組
- 14. 如何將記錄集從數據庫轉換爲數組?
- 15. 如何將Django QuerySet轉換爲字典列表?
- 16. Django:如何將QuerySet轉換爲字符串
- 17. 將2D numpy數組列表轉換爲一個3D numpy數組?
- 18. 將RGBA numpy數組轉換爲二進制2d numpy數組
- 19. 將numpy矩陣轉換爲python數組
- 20. 將NumPy數組轉換爲cvMat cv2
- 21. 將vtkPoints轉換爲numpy數組?
- 22. 將1D數組轉換爲numpy矩陣
- 23. 將列表轉換爲numpy數組
- 24. 將numpy數組轉換爲圖像
- 25. 將數組從MATLAB轉換爲numpy
- 26. 將int列表轉換爲numpy數組
- 27. pyqt:將numpy數組轉換爲QImage
- 28. 將numpy數組轉換爲PySide QPixmap
- 29. 將numpy數組轉換爲cython指針
- 30. 將文本轉換爲numpy數組
嗯... ...晚餐 – 2009-11-16 11:21:31
感謝您的諮詢!但我不會爲這個明顯的答案發布這個問題:)。 – Vishal 2009-11-16 19:31:23