亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pandas Python 搜索 JSON 列表

Pandas Python 搜索 JSON 列表

慕村9548890 2023-05-09 09:33:19
我有一個 JSON 文件結構化列表,所以:[ {   "name": "first",   "points": 0.5,   "tags": [{      "key": "Owner",      "value": "A"   }] }, {   "name": "first",   "points": 1.5,   "tags": [{      "key": "Owner",      "value": "B"   }] }, {   "name": "first",   "points": 24,   "tags": [{      "key": "SomeOtherTag",      "value": "XYZ"   }] }]我想加載這個 JSON 數組,然后過濾特定key: value標簽并計算points. 例如,過濾這個“主”列表,然后Owner: A計算應該給我結果的點數0.5我知道如何計算點數,items.points.sum()但我正在努力按標簽鍵/值進行過濾。這是我到目前為止所擁有的:import pandas as pditems = pd.read_json('all_items.json')# Do something to filter down the listfiltered_items = ?????print(filtered_items.points.sum())根據 Rob 的解決方案進行編輯:#pipenv install pandas# pandas = 1.1.0import pandas as pditems = pd.read_json('all_items.json')pd.json_normalize(items, record_path="tags", meta=[['name'], ['points']])給TypeError: string indices must be integers。
查看完整描述

3 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

您可以使用json_normalize


df = pd.io.json.json_normalize(s)

print(df)


? ? name? points? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?tags

0? first? ? ?0.5? ? ? ? ? ?[{'key': 'Owner', 'value': 'A'}]

1? first? ? ?1.5? ? ? ? ? ?[{'key': 'Owner', 'value': 'B'}]

2? first? ? 24.0? [{'key': 'SomeOtherTag', 'value': 'XYZ'}]


# to filter

filter_mask = df['tags'].apply(lambda x: x[0]['value'] == 'A')

df.loc[filter_mask, "points"].sum()


查看完整回答
反對 回復 2023-05-09
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

如果您不嚴格使用 Pandas,另一種方法是對生成器理解求和,假設tags每行列表中只嵌入一個字典:

sum(entry["points"] for entry in data if entry["tags"][0]["value"] == "A")
0.5


查看完整回答
反對 回復 2023-05-09
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

json_normalize()為你做這一切


js = [{'name': 'first', 'points': 0.5, 'tags': [{'key': 'Owner', 'value': 'A'}]},

 {'name': 'first', 'points': 1.5, 'tags': [{'key': 'Owner', 'value': 'B'}]},

 {'name': 'first',

  'points': 24,

  'tags': [{'key': 'SomeOtherTag', 'value': 'XYZ'}]}]



pd.json_normalize(js, record_path="tags", meta=[['name'], ['points']])


輸出


          key value   name points

        Owner     A  first    0.5

        Owner     B  first    1.5

 SomeOtherTag   XYZ  first     24

補充更新

如果從文件中讀取


import json

with open('all_items.json') as f: items = json.load(f)


pd.json_normalize(items, record_path="tags", meta=[['name'], ['points']])


查看完整回答
反對 回復 2023-05-09
  • 3 回答
  • 0 關注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號