如何将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