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 乐观锁 乐观锁的出发点是,同一条数据很少会因为并发修改而产生冲突,适用于读多写少的场景,用以提高吞吐量. 实现方式,读取一个字段,执行处理逻辑,当需要更新数据时,再次检查该字段是 ...
随机推荐
- 《Java基础知识》Java集合(Collection)
作为一个Developer,Java集合类是我们在工作中运用最多的.最频繁的类.相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求: Java集合就像一个容器,可以存储任何类型的数 ...
- 后缀数组SA入门(史上最晦涩难懂的讲解)
参考资料:victorique的博客(有一点锅无伤大雅,记得看评论区),$wzz$ 课件(快去$ftp$%%%),$oi-wiki$以及某个人的帮助(万分感谢!) 首先还是要说一句:我不知道为什么我这 ...
- 【并发编程】Java并发编程传送门
本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. [并发编程系列博客传送门](https://www.cnblogs.com/54 ...
- Asp.net 学习记录(一)使用asp.net 构建webAPI接口
此系列使用Asp.net构建前后端分离的博客网站. 创建一个asp.net项目 我们这里使用的是空模板,把Https配置去掉(安全先不配置) 构建webapi接口有很多方法,在这里我们选择最简单的2种 ...
- wx-all
学习这部分时也学了不少代码,一段一段往这上面写实在有点~~~ 直接把代码部署到代码该在的地方吧,哈哈哈 这是网址 把代码放这上面就好多了,不怕代码丢,还可保证代码完整,嘻嘻嘻~~~~~~
- DG中switchover切换操作
问题描述:我们配置DG的目的就是为了在主库出现故障时,备库能够提供服务,保证业务的正常运行,switchover是用户有计划的进行停机切换,能够保证不丢失数据,我记录一下我进行switchover中的 ...
- centos7搭建ftp服务器并配置匿名用户
什么是FTP? FTP(File Transfer Protocol,文件传输协议),是TCP/IP网络和Internet上最早使用的协议之一.用来将实现从一台电脑传送文件到另一台电脑,或者接收和查看 ...
- Kubernetes行业调研报告:多集群、多云部署成企业首选策略
新兴的多集群.多云部署成为首选的企业策略,而边缘部署则呈上升趋势 2019年11月5日,业界采用最广泛的Kubernetes管理平台创造者Rancher Labs(以下简称Rancher)发布了首份调 ...
- jvm前奏篇
javac编译原理 源文件----->类文件 词法分析------>语法分析------>语义分析----字节码生成器------.class 文件 javap 反编译 之所以能到 ...
- bootstrap-table 常用总结-1
两种表格工具,今天都用到了,一种是我前几篇写到过的jqgrid,(传送门)另一个就是bootstrap-table了.用过之后会发现,两种表格的方式大同小异,但是为什么这次要换成bootstrap-t ...