| 姓名 | 年齡 | 地址 | |
|---|---|---|---|
| 1 | “史蒂夫” | 27 | {"number": 4, "street": "Main Road", "city": "Oxford"} |
| 2 | “亞當” | 32 | {"number": 78, "street": "High St", "city": "Cambridge"} |
但是,子檔案將在子檔案單元格中顯示為 JSON
from pandas import DataFrame
df = DataFrame(list(db.collection_name.find({}))
print(df)
我怎樣才能使用python獲得像這樣的低于第二個表?
這之后的方法是什么?
| 姓名 | 年齡 | 地址.號碼 | 街道地址 | 地址.城市 | |
|---|---|---|---|---|---|
| 1 | 史蒂夫 | 27 | 4 | “主路” | “牛津” |
| 2 | 亞當 | 32 | 78 | “高街” | “劍橋” |
uj5u.com熱心網友回復:
您可以使用pd.DataFrame將列中的 JSON/dict 擴展address為 JSON/dict 內容的資料框。然后,使用 加入原始資料框.join(),如下所示:
可選步驟:如果您的 JSON/dict 實際上是字串,請先將它們轉換為正確的 JSON/dict。否則,跳過此步驟。
import ast
df['address'] = df['address'].map(ast.literal_eval)
主要代碼:
import pandas as pd
df[['name', 'age']].join(pd.DataFrame(df['address'].tolist(), index=df.index).add_prefix('address.'))
結果:
name age address.number address.street address.city
1 Steve 27 4 Main Road Oxford
2 Adam 32 78 High St Cambridge
或者,如果您只有幾列要從 JSON/dict 添加,您也可以使用字串訪問器將它們一一添加str[],如下所示
df['address.number'] = df['address'].str['number']
df['address.street'] = df['address'].str['street']
df['address.city'] = df['address'].str['city']
設定
import pandas as pd
data = {'name': {1: 'Steve', 2: 'Adam'},
'age': {1: 27, 2: 32},
'address': {1: {"number": 4, "street": "Main Road", "city": "Oxford"},
2: {"number": 78, "street": "High St", "city": "Cambridge"}}}
df = pd.DataFrame(data)
uj5u.com熱心網友回復:
根據用例,設定聚合管道和$project必要的嵌套檔案可能更有意義:
df = pd.DataFrame(db.collection_name.aggregate([{
'$project': {
'_id': 0,
'name': '$name',
'age': '$age',
# Raise Sub-documents to top-level under new name
'address_number': '$address.number',
'address_street': '$address.street',
'address_city': '$address.city'
}
}]))
df:
name age address_number address_street address_city
0 Steve 27 4 Main Road Oxford
1 Adam 32 78 High St Cambridge
或者,如果有許多太多的領域做手工,我們也可以repalceRoot和mergeObjects:
df = pd.DataFrame(db.collection_name.aggregate([
{'$replaceRoot': {'newRoot': {'$mergeObjects': ["$$ROOT", "$address"]}}},
{'$project': {'_id': 0, 'address': 0}}
]))
df:
name age number street city
0 Steve 27 4 Main Road Oxford
1 Adam 32 78 High St Cambridge
collection_name 設定:
# Drop Collection if exists
db.collection_name.drop()
# Insert Sample Documents
db.collection_name.insert_many([{
'name': 'Steve', 'age': 27,
'address': {"number": 4, "street": "Main Road", "city": "Oxford"}
}, {
'name': 'Adam', 'age': 32,
'address': {"number": 78, "street": "High St", "city": "Cambridge"}
}])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/339369.html
