gpt4 book ai didi

python - 从 MongoDB 获取嵌套数据到 Pandas 数据框

转载 作者:可可西里 更新时间:2023-11-01 09:58:58 28 4
gpt4 key购买 nike

我正在将 Twitter 数据(推文 + 元数据)收集到 MongoDB 服务器中。现在我想做一些统计分析。为了将数据从 MongoDB 获取到 Pandas 数据框中,我使用了以下代码:

cursor = collection.find({},{'id': 1, 'text': 1})

tweet_fields = ['id', 'text']

result = pd.DataFrame(list(cursor), columns = tweet_fields)

通过这种方式,我成功地将数据加载到 Pandas 中,这太棒了。现在我想对创建推文的用户进行一些分析,这也是我收集的数据。此数据位于 JSON 的嵌套部分(我不能 100% 确定这是否是真正的 JSON),例如 user.id,它是 Twitter 用户帐户的 ID。

我可以使用点符号将其添加到光标:

cursor = collection.find({},{'id': 1, 'text': 1, 'user.id': 1})

但这会导致该列的结果为 NaN。我发现问题在于数据的结构方式:

不带 user.id 的光标位:

[{'_id': ObjectId('561547ae5371c0637f57769e'),
'id': 651795711403683840,
'text': 'Video: Zuuuu gut! Caro Korneli besucht für extra 3 Pegida Via KFMW http://t.co/BJX5GKrp7s'},
{'_id': ObjectId('561547bf5371c0637f5776ac'),
'id': 651795781557583872,
'text': 'Iets voor werkloze xenofobe PVV-ers, (en dat zijn waarschijnlijk wel de meeste).........Ze zoeken bij Frontex een paar honderd grenswachten.'},
{'_id': ObjectId('561547ab5371c0637f57769c'),
'id': 651795699881889792,
'text': 'RT @ansichtssache47: Geht gefälligst arbeiten, die #Flüchtlinge haben Hunger! http://t.co/QxUYfFjZB5 #grenzendicht #rente #ZivilerUngehorsa…'}]

带有 user.id 的光标位:

[{'_id': ObjectId('561547ae5371c0637f57769e'),
'id': 651795711403683840,
'text': 'Video: Zuuuu gut! Caro Korneli besucht für extra 3 Pegida Via KFMW http://t.co/BJX5GKrp7s',
'user': {'id': 223528499}},
{'_id': ObjectId('561547bf5371c0637f5776ac'),
'id': 651795781557583872,
'text': 'Iets voor werkloze xenofobe PVV-ers, (en dat zijn waarschijnlijk wel de meeste).........Ze zoeken bij Frontex een paar honderd grenswachten.',
'user': {'id': 3544739837}}]

所以简而言之,我不明白我是如何将我收集的数据的嵌套部分放在我的 Pandas 数据框的单独列中的。

最佳答案

我使用这样的函数将嵌套的 JSON 行放入数据框中。它使用方便的 pandas json.normalize 函数:

import pandas as pd
from bson import json_util, ObjectId
from pandas.io.json import json_normalize
import json

def mongo_to_dataframe(mongo_data):

sanitized = json.loads(json_util.dumps(mongo_data))
normalized = json_normalize(sanitized)
df = pd.DataFrame(normalized)

return df

只需将您的 mongo 数据作为参数调用函数即可。

sanitized = json.loads(json_util.dumps(mongo_data)) 将 JSON 行作为常规 JSON 加载

normalized = json_normalize(sanitized) 取消嵌套数据

df = pd.DataFrame(normalized) 只是把它变成一个数据帧

关于python - 从 MongoDB 获取嵌套数据到 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33347906/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com