django中使用pandas Django-pandas
在django中使用pandas操作django的ORM查询出来的QuerySet对象,可以使用插件django-pandas。
截止教程书写时间,django-pandas已发布到0.6.1。
依赖:django>=1.4.5
Django-model-utils >=1.4.0
Pandas >=0.12.0
当然,还需要numpy
用法:
1、IO模块:
该django-pandas.io模块提供了一些方便的方法,以便从django的查询集转换成DataFrames的创建。
read_frame
参数:
l qs :一个django的QuerySet。
l fieldnames :用于创建DataFrame的模型字段名称列表。可以使用双下划线指定另一个model中的相关字段,以通常的Django方式跨越关系。
l index_col:使用指定用于DataFrame索引的字段名称。如果索引字段不在fieldnames参数中,则将会添加,注意这里的字段必须为该model里的字段。
l coerce_float:Boolean(布尔值),默认为True。尝试将值转换为非字符串,将非数字对象(如decimal.Decimal)转化为浮点类型。
Eg:
model.py
class Img_info(models.Model):
'''
图片信息表
'''
img_name = models.CharField(max_length=128, verbose_name="图片名")
img = models.ImageField(upload_to="img", verbose_name="图片") class Meta:
db_table = "img_info" class Product_score(models.Model):
'''
图片打分表
'''
img_of = models.ForeignKey(Img_info, on_delete=models.CASCADE, verbose_name="图片")
scoring_staff = models.CharField(max_length=32, verbose_name="打分员")
score_num = models.FloatField(verbose_name="分数") class Meta:
db_table = "product_score"
views.py
1、直接转化
from django_pandas.io import read_frame def tset(request):
qs = Product_score.objects.all()
qs_dataframe = read_frame(qs=qs)
print(qs_dataframe)
return HttpResponse('ok')
运行结果:
id img_of scoring_staff score_num
0 15 Img_info object (5) 测试1 22.0
1 16 Img_info object (6) 测试1 23.0
2 17 Img_info object (7) 测试1 24.0
3 18 Img_info object (8) 测试1 25.0
4 19 Img_info object (9) 测试1 26.0
5 20 Img_info object (5) 测试2 22.0
6 21 Img_info object (6) 测试2 23.0
7 22 Img_info object (7) 测试2 24.0
8 23 Img_info object (8) 测试2 25.0
9 24 Img_info object (9) 测试2 26.0
10 25 Img_info object (5) 测试3 22.0
11 26 Img_info object (6) 测试3 23.0
12 27 Img_info object (7) 测试3 24.0
13 28 Img_info object (8) 测试3 25.0
2、跨关联表显示
views.py
from django_pandas.io import read_frame def tset(request):
qs = Product_score.objects.all()
qs_dataframe = read_frame(qs=qs,fieldnames=['img_of__img_name', 'scoring_staff', 'score_num'])
print(qs_dataframe)
return HttpResponse('ok')
运行结果:
img_of__img_name scoring_staff score_num
0 士大夫 测试1 22.0
1 士大夫 测试2 22.0
2 士大夫 测试3 22.0
3 54撒 测试1 23.0
4 54撒 测试2 23.0
5 54撒 测试3 23.0
6 撒旦撒 测试1 24.0
7 撒旦撒 测试2 24.0
8 撒旦撒 测试3 24.0
9 撒旦撒2 测试1 25.0
10 撒旦撒2 测试2 25.0
11 撒旦撒2 测试3 25.0
12 24 测试1 26.0
13 24 测试2 26.0
3、指定索引
views.py
def tset(request):
qs = Product_score.objects.all()
qs_dataframe = read_frame(qs=qs,fieldnames=['img_of__img_name', 'scoring_staff', 'score_num'],index_col='id')
print(qs_dataframe)
return HttpResponse('ok')
运行结果:
img_of__img_name scoring_staff score_num
id
15 士大夫 测试1 22.0
20 士大夫 测试2 22.0
25 士大夫 测试3 22.0
16 54撒 测试1 23.0
21 54撒 测试2 23.0
26 54撒 测试3 23.0
17 撒旦撒 测试1 24.0
22 撒旦撒 测试2 24.0
27 撒旦撒 测试3 24.0
18 撒旦撒2 测试1 25.0
23 撒旦撒2 测试2 25.0
28 撒旦撒2 测试3 25.0
19 24 测试1 26.0
24 24 测试2 26.0
2、DataFrameManager
django-pandas提供了一个自定义管理器,可用于要呈现为pandas Dataframes的模型。该DataFrameManager管理器提供to_dataframe返回你模型查询集(queryset )为pandas的DataFrame。要使用DataFrameManager,首先覆盖model定义中的默认管理器(objects)。
这将使您可以访问以下QuerySet方法:
l to_dataframe 从QuerySet返回DataFrame
l to_timeserie 用于创建时间序列的便捷方法,即DataFrame索引是DateTime或PeriodIndex的实例
l to_pivot_table 从QuerySet创建数据透视表的便捷方法
to_dataframe
l fieldnames :用于创建DataFrame的模型字段名称列表。可以使用双下划线指定另一个model中的相关字段,以通常的Django方式跨越关系。
l index:使用指定用于DataFrame索引的字段名称。如果索引字段不在fieldnames参数中,则将会添加,注意这里的字段必须为该model里的字段。
l coerce_float:Boolean(布尔值),默认为True。尝试将值转换为非字符串,将非数字对象(如decimal.Decimal)转化为浮点类型。
eg:
models.py
class Img_info(models.Model):
'''
图片信息表
'''
img_name = models.CharField(max_length=128, verbose_name="图片名")
img = models.ImageField(upload_to="img", verbose_name="图片") class Meta:
db_table = "img_info" class Product_score(models.Model):
'''
图片打分表
'''
img_of = models.ForeignKey(Img_info, on_delete=models.CASCADE, verbose_name="图片")
scoring_staff = models.CharField(max_length=32, verbose_name="打分员")
score_num = models.FloatField(verbose_name="分数")
objects = DataFrameManager() class Meta:
db_table = "product_score"
views.py
def tset(request):
qs = Product_score.objects.all()
qs_dataframe = qs.to_dataframe(fieldnames=['img_of__img_name', 'scoring_staff', 'score_num'], index='id', coerce_float=True)
print(qs_dataframe)
return HttpResponse('ok')
运行结果:
img_of__img_name scoring_staff score_num
id
15 士大夫 测试1 22.0
20 士大夫 测试2 22.0
25 士大夫 测试3 22.0
16 54撒 测试1 23.0
21 54撒 测试2 23.0
26 54撒 测试3 23.0
17 撒旦撒 测试1 24.0
22 撒旦撒 测试2 24.0
27 撒旦撒 测试3 24.0
18 撒旦撒2 测试1 25.0
23 撒旦撒2 测试2 25.0
28 撒旦撒2 测试3 25.0
19 24 测试1 26.0
24 24 测试2 26.0
您可以使用过滤器和排除:
筛选出分数大于23的
views.py
def tset(request):
qs = Product_score.objects.all()
qs_dataframe = qs.filter(score_num__gt=23).to_dataframe(fieldnames=['img_of__img_name', 'scoring_staff', 'score_num'], index='id', coerce_float=True)
print(qs_dataframe)
return HttpResponse('ok')
运行结果:
img_of__img_name scoring_staff score_num
id
17 撒旦撒 测试1 24.0
18 撒旦撒2 测试1 25.0
19 24 测试1 26.0
22 撒旦撒 测试2 24.0
23 撒旦撒2 测试2 25.0
24 24 测试2 26.0
27 撒旦撒 测试3 24.0
28 撒旦撒2 测试3 25.0
to_pivot_table
- fieldnames:用于创建DataFrame的模型字段名称列表。可以使用双下划线指定另一个model中的相关字段,以通常的Django方式跨越关系。
- values:要聚合的列,可选
- rows : 要分组的列名称或数组的列表,在数据透视表的x轴上分组的键
- cols : 要分组的列名称或数组的列表,在数据透视表的y轴上分组的键
- aggfunc : function,默认numpy.mean或函数列表,如果传递的函数列表,生成的数据透视表将具有分层列,其顶层是函数名称(从函数对象本身推断)
- fill_value : 标量,默认无,用于替换缺失值的值
- margin : boolean,默认为False,添加所有行/列(例如,对于小计/总计)
- dropna:布尔值,默认为True,去除NaN值
views.py
def tset(request):
qs = Product_score.objects.all()
data_df_to_pivot_table = qs.to_pivot_table(
values='score_num', rows=['img_of__img_name'], cols=['scoring_staff'], fieldnames=['img_of__img_name', 'scoring_staff', 'score_num'], margins=True)
print(data_df_to_pivot_table)
return HttpResponse('ok')
运行结果:
scoring_staff 测试1 测试2 测试3 All
img_of__img_name
24 26.0 26.0 NaN 26.000000
54撒 23.0 23.0 23.0 23.000000
士大夫 22.0 22.0 22.0 22.000000
撒旦撒 24.0 24.0 24.0 24.000000
撒旦撒2 25.0 25.0 25.0 25.000000
All 24.0 24.0 23.5 23.857143
django中使用pandas Django-pandas的更多相关文章
- Django 中CSRF中间件 'django.middleware.csrf.CsrfViewMiddleware',
1.Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误 CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站 ...
- Django中ORM介绍和字段及其参数
ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...
- Django中ORM介绍
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- Django 中的 cookie 和 session
一.cookie 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新的 ...
- django中的ORM介绍和字段及字段参数
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)
Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...
- Django中cookie&session的实现
1.什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思.在HTTP中它表示服务器送给客户端浏览器的小甜点.其实Cookie是key-value结构,类似于一个python中的字典.随着服 ...
- Django中的ORM介绍,字段以及字段的参数。
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- django中使用mysql数据库的事务
django中怎么使用mysql数据库的事务 Mysql数据库事务: 在进行后端业务开始操作修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个整体事务,即要么一起成功,要么一起 ...
- 如何在 Django 中保证并发的数据一致性
1. 关于锁 1.1 乐观锁 乐观锁的出发点是,同一条数据很少会因为并发修改而产生冲突,适用于读多写少的场景,用以提高吞吐量. 实现方式,读取一个字段,执行处理逻辑,当需要更新数据时,再次检查该字段是 ...
随机推荐
- WebGPU学习(六):学习“rotatingCube”示例
大家好,本文学习Chrome->webgpu-samplers->rotatingCube示例. 上一篇博文: WebGPU学习(五): 现代图形API技术要点和WebGPU支持情况调研 ...
- phper使用MySQL 针对千万级的大表要怎么优化?
有需要学习交流的友人请加入交流群的咱们一起,群内都是1-7年的开发者,希望可以一起交流,探讨PHP,swoole这块的技术 或者有其他问题 也可以问,获取swoole或者php进阶相关资料私聊管理即可 ...
- [转]加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用
原文链接:http://www.cnblogs.com/sochishun/p/7028056.html 加密技术通常分为两大类:"对称式"和"非对称式". 对 ...
- 使用PXE+DHCP+TFTP+kickstart搭建无人执守系统安装服务器
原理和概念: 1. 什么是PXE 严格来说,PXE 并不是一种安装方式,而是一种引导的方式.进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 ...
- gitlab如何从Github导入项目
本文简单演示如何Github上导入项目到私人搭建的Gitlab中,搭建过程参考:CentOS7 搭建gitlab服务器. Gitlab版本是gitlab-ce-12.0.2,界面可能稍有差异,但应该影 ...
- 使用PIL将图片转成字符
注意:转化成txt后,txt的字体使用“宋体”,不能使用“微软雅黑”,否则图像会变形 import numpy as npfrom PIL import Image if __name__ == '_ ...
- UWP 使用FontIcon
通常在设置按钮内容的时候,我们一般会写上文字,比如 <Button Content="OK"/> 但是有一些特殊情况,比如我们的按钮需要一个图标, 这个时候就需要一些特 ...
- IDEA 如何自动导入(import)
如果大家正在使用一个未曾导入(import)过的类,或者它的静态方法或者静态字段,IDEA 会给出对应的建议,只要按下 ⌥(option)和回车就可以接受建议. 但我觉得这样做仍然很麻烦,不够智能化. ...
- Java 基础复习 基础数据类型与包装器类型
Java 基础 基础数据类型与包装器类型 基础数据类型 java 中包含哪些基础数据类型,默认值分别是多少? 基础数据类型 byte short int long double float char ...
- Android项目实战之高仿网易云音乐项目介绍
这一节我们来讲解这个项目所用到的一些技术,以及一些实现的效果图,让大家对该项目有一个整体的认识,推荐大家收藏该文章,因为我们发布文章后会在该文章里面加入链接,这样大家找着就很方便. 目录 第1章 前期 ...