2017-10-29 177 views
1

我已经在本地的couchdb服务器上下载了Twitter数据。 它被保存为json文件。如何查询来自couchdb的文档并将它们加载到熊猫数据框中?

我使用此代码在python中输入数据库。 第一次导入库

import couchdb 
import pandas as pd 
from couchdbkit import Server 
import json 
import cloudant 

下次连接到服务器,然后选择我要进入数据库。

dbname = couchdb.Server('http://localhost:5984') 
db = dbname['Test'] 
server = couchdb.Server('http://localhost:5984') 

我可以使用python创建和删除数据库,但是我不知道如何将数据从服务器放到jupyter笔记本上。 我想通过转发文本和时间来分析它。 我只能看到一个来自python的JSON文件。

如果可能的话,我想在数据库中添加所有JSON数据到python中的pandas数据框,这样我就可以在R中分析它。

问题是:如何查询文档并将它们加载到熊猫数据框中?

+0

这里有什么问题?你想将沙发文档转储为CSV?你想查询文件并将它们加载到熊猫数据框中? –

+0

谢谢你的评论。如何查询文档并将它们加载到熊猫数据框中? – Tateishi

回答

1

来自CouchDB数据库的所有文档都可以从/{db}/_all_docs端点以include_docs查询属性提取。响应是一个json对象,其中列出了rows字段中的所有文档。

您可以使用requests包直接与CouchDB的工作,然后用pandas.read_json加载响应为熊猫或使用couchdb包转换JSON为Python对象的内部,然后直接装入反应,即做这样的事情:

import couchdb 
import pandas as pd 

couch = couchdb.Server('http://localhost:5984') 
db = couch['Test'] 
rows = db.view('_all_docs', include_docs=True) 
data = [row['doc'] for row in rows] 
df = pd.DataFrame(data) 

请注意比读一个完整的数据库到内存中可能是资源征税,所以你可能要考虑_all_docs终点的skiplimit查询参数读取较小的批次信息。

+0

我能够像你所建议的那样,在熊猫上以数据框的形式加载json。有一件事,在json里面是另一个带有字典的json文件。例。列名称是实体并在其内部{u'symbols':[],u'user_mentions':[{u'indices':[0,14],u'id':305734622,u'id_str':u'305734622 ',u'name':u'Charles Watts',u'screen_name':u'name_'},{u'indices':[15,24],u'id':845149392,u'id_str':u' 845149392',u'name':u'name_',u'screen_name':name'}],u'hashtags':[],u'urls':[]}如何将这些添加为数据框? – Tateishi

+0

这取决于您想要在最后获得的数据帧的结构。熊猫的数据框是二维结构,因此在将结果数据传递到熊猫之前,需要将'row ['doc']'转换为期望的形状,同时循环行。 – eiri

+0

你能解释_'doc'_的含义吗? – Tateishi

相关问题