对于想了解使用PyMongo将PandasDataframe插入mongodb的读者,本文将提供新的信息,我们将详细介绍利用pandasdataframe方法导入数据,并且为您提供关于DataScie
对于想了解使用PyMongo将Pandas Dataframe插入mongodb的读者,本文将提供新的信息,我们将详细介绍利用pandas dataframe方法导入数据,并且为您提供关于Data Science Fundamentals for Python and MongoDB 免积分下载、django中使用pandas,将queryset转化为dataframe,Django-pandas、Mongock 失败:NoClassDefFoundError org/springframework/data/mongodb/MongoDatabaseFactory、Mongodb-- python中使用pymongo连接mongodb数据库的有价值信息。
本文目录一览:- 使用PyMongo将Pandas Dataframe插入mongodb(利用pandas dataframe方法导入数据)
- Data Science Fundamentals for Python and MongoDB 免积分下载
- django中使用pandas,将queryset转化为dataframe,Django-pandas
- Mongock 失败:NoClassDefFoundError org/springframework/data/mongodb/MongoDatabaseFactory
- Mongodb-- python中使用pymongo连接mongodb数据库
使用PyMongo将Pandas Dataframe插入mongodb(利用pandas dataframe方法导入数据)
使用插入pandas DataFrame到mongodb的最快方法是什么PyMongo
?
尝试次数
db.myCollection.insert(df.to_dict())
给出了一个错误
InvalidDocument: documents must have only string keys, the key wasTimestamp(''2013-11-23 13:31:00'', tz=None)
db.myCollection.insert(df.to_json())
给出了一个错误
TypeError: ''str'' object does not support item assignment
db.myCollection.insert({id: df.to_json()})
给出了一个错误
InvalidDocument: documents must have only string a keys, key was <built-infunction id>
df
<class ''pandas.core.frame.DataFrame''>DatetimeIndex: 150 entries, 2013-11-23 13:31:26 to 2013-11-23 13:24:07Data columns (total 3 columns):amount 150 non-null valuesprice 150 non-null valuestid 150 non-null valuesdtypes: float64(2), int64(1)
答案1
小编典典我怀疑是否有 最快 和 最 简单的 方法。如果您不担心数据转换,可以
>>> import json>>> df = pd.DataFrame.from_dict({''A'': {1: datetime.datetime.now()}})>>> df A1 2013-11-23 21:14:34.118531>>> records = json.loads(df.T.to_json()).values()>>> db.myCollection.insert(records)
但是,如果您尝试将数据加载回,则会得到:
>>> df = read_mongo(db, ''myCollection'')>>> df A0 1385241274118531000>>> df.dtypesA int64dtype: object
所以你必须将“A” columnt回datetime
S,以及所有不int
,float
或str
字段您DataFrame
。对于此示例:
>>> df[''A''] = pd.to_datetime(df[''A''])>>> df A0 2013-11-23 21:14:34.118531
Data Science Fundamentals for Python and MongoDB 免积分下载
图书说明:
建立必要的基础数据科学技能,以便更好地理解复杂的数据科学算法。这本以示例为导向的书提供了完整的Python编码示例,以补充和阐明数据科学概念,并丰富学习体验。编码示例包括适当时的可视化。本书是应用和实现机器学习算法的必要前提。
这本书是独立的。掌握了掌握内容所需的所有数学,统计学,随机和编程技巧。不需要深入了解面向对象编程,因为提供并解释了完整的示例。
Python和MongoDB的数据科学基础知识对于那些有兴趣从事数据科学职业的人来说是一个很好的起点。与任何科学一样,数据科学的基础是能力的先决条件。如果没有数学,统计学,数据处理和编码的熟练程度,成功的道路充其量只是“充满希望”。本书中的编码示例简洁,准确,完整,完美地补充了所引入的数据科学概念。
你将学到什么
- 为数据科学事业做好准备
- 在Python中使用复杂的数据结构
- 使用蒙特卡罗和随机算法进行模拟
- 使用向量和矩阵应用线性代数
- 利用复杂的算法,如梯度下降和主成分分析
- 通过数据进行Wrangle,清理,可视化和解决问题
- 使用MongoDB和JSON处理数据
本书适用于谁
新手渴望闯入数据科学世界,而热心人士则希望通过掌握潜在的基础知识来丰富,深化和发展数据科学技能,这些基础知识有时会在急于提高效率时被忽略。面向对象编程的一些知识将使学习更容易。
下载地址:Data Science Fundamentals for Python and MongoDB
更多免积分电子书,请访问:IE布克斯网
django中使用pandas,将queryset转化为dataframe,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,‘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="打分员") 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‘,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‘,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‘],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
Mongock 失败:NoClassDefFoundError org/springframework/data/mongodb/MongoDatabaseFactory
如何解决Mongock 失败:NoClassDefFoundError org/springframework/data/mongodb/MongoDatabaseFactory?
我在 Spring Boot 应用中使用以下 pom:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.13.RELEASE</version>
<relativePath /><!-- resolve parent from repository,refer to http://www.tomitribe.com/blog/2016/06/i-do-not-hate-apache-maven/ -->
</parent>
<dependencies>
<dependency>
<groupId>com.github.cloudyrock.mongock</groupId>
<artifactId>mongock-bom</artifactId>
<version>4.3.8</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.github.cloudyrock.mongock</groupId>
<artifactId>mongock-spring-v5</artifactId>
<version>4.3.8</version>
</dependency>
<dependency>
<groupId>com.github.cloudyrock.mongock</groupId>
<artifactId>mongodb-springdata-v3-driver</artifactId>
<version>4.3.8</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.2.12.RELEASE</version>
</dependency>
</dependencies>
当我使用 java -jar my-app.jar
运行应用程序时,出现以下错误:
NoClassDefFoundError org/springframework/data/mongodb/MongoDatabaseFactory
但是当我使用 -noverify
运行应用程序时,似乎一切正常
请问,有人可以帮我吗?
解决方法
这是因为版本不兼容。
正如您在此 compatibility table 中所见,您使用的 Mongock 版本与 spring-data 3.x 兼容,但您使用的是 2.x。
Mongock 为 spring-data 提供了两个驱动,mongodb-springdata-v3-driver,用于 spring-data 3.x 和 mongodb-springdata-v2-drver,用于 spring-data 2.2.X
我有几个建议:
- 要么将 spring-data 依赖升级到 3.x,要么使用 mongodb-springdata-v2-drver(推荐第一个)
- 使用依赖项管理,因此您无需为每个依赖项指定版本。你可以在春天和Mongock
有了这个,你应该解决你的问题;)
Mongodb-- python中使用pymongo连接mongodb数据库
一.使用
通过pip或者pychrm下载pymongo模块
import json
from pymongo import MongoClient
from bson import ObjectId
mc = MongoClient("127.0.0.1",27017)
MONGODB = mc["数据库名"]
MONGODB.users.find({}) # 可以操作了
上面的文件一般单独写一个settings.py,在用到的时候,通过引入MONGO来操作
关于bson:
mongo中取出的数据有一个''_id''字段相当于mysql中的id, 这个字段的类型是Objectid,所以查询的结果不能直接json序列化,需要将这个''_id''转化为str类型后才能json序列化,相应的,从前端传过来的''_id''也要通过bson转化为ObjectId才能查到Mongodb中的数据
@au.route(''/auto_login'',methods=[''POST''])
def auto_login():
user_info = request.form.to_dict()
print(user_info)
try:
user_id = user_info.get(''user_id'')
user = MONGODB.users.find_one({''_id'': ObjectId(user_id)})
user[''_id''] = str(user[''_id''])
RET = {
''code'': 1,
''msg'': ''自动登陆成功'',
''data'': user
}
except:
RET = {
''code'': 0,
''msg'': ''自动登陆失败'',
''data'': {}
}
return jsonify(RET)
操作示例
# MONGODB = mc["admin"]
# res = MONGODB.users.find_one({"name":"Tom"})
# res["cours"].append({"name":"Tom","money":"100"})
# for index,cours in enumerate(res["cours"]):
# if cours.get("name") == "Tom":
# res["cours"][index]["score"] = 99
# MONGODB.users.delete_one({"age":84})
# MONGODB.users.delete_many({"age":84})
# user = MONGODB.users.find_one({"_id":ObjectId("5cb6eb7322b9441020186701")})
# print(user.get("_id"),type(user.get("_id")))
#
# user["_id"] = str(user["_id"])
# jsonstr = json.dumps(user)
# print(jsonstr , type(jsonstr))
关于使用PyMongo将Pandas Dataframe插入mongodb和利用pandas dataframe方法导入数据的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Data Science Fundamentals for Python and MongoDB 免积分下载、django中使用pandas,将queryset转化为dataframe,Django-pandas、Mongock 失败:NoClassDefFoundError org/springframework/data/mongodb/MongoDatabaseFactory、Mongodb-- python中使用pymongo连接mongodb数据库等相关内容,可以在本站寻找。
本文标签: