我正在使用 opensea 回應檔案 json,嘗試獲取有關 nft 的資訊
json 檔案 https://paste.pythondiscord.com/yazaxipiwe 完整的 json 檔案 https://cdn.discordapp.com/attachments/303906514266226689/1028843885906116658/opensea.json
我在提取特征資料時遇到問題,特征具有動態資料,例如有些具有空特征資料,有些具有 4 到 8 個特征資料
如何提取這樣的特征
name link traits_type(eye) traits_type(fur) traits_type(mouth)
APE 0 https://lh3.google.com 3d eye red open-mouth
APE1 https://lh3.google.com brown robot moster
APE2 https://lh3.google.com white green big teeth
APE3 https://lh3.google.com monster eye brown sharp teeth
CSV 鏈接
代碼
file = json.load(open('opensea.json'))
name.append(file['name'])
link.append(file['image_url'])
但是如何獲取特征資料?
uj5u.com熱心網友回復:
它可能需要使用for-loop 將其轉換為字典{type:value}
data = {}
for item in file['traits']:
key = item['trait_type']
value = item['value']
data[key] = value
print(key, value)
稍后您可以創建行(使用.get()您可以在專案不存在時設定默認值)
row = [
file['name'],
file['image_url'],
data.get('Eye', ''),
data.get('Fur', ''),
data.get('Mouth', '')
]
并添加到串列
all_rows.append(row)
然后將所有轉換為 DataFrame
df = pd.DataFrame(all_rows, columns=['name', 'link', 'traits_type(eye)', 'traits_type(fur)', 'traits_type(mouth)']
import json
import pandas as pd
file = json.load(open('opensea.json'))
print(file.keys())
all_rows = []
for asset in file['assets']:
data = {}
for item in asset['traits']:
key = item['trait_type']
value = item['value']
data[key] = value
#print(key, value)
row = [
asset['name'],
asset['image_url'],
data.get('Fur', ''),
data.get('Eyes', ''),
data.get('Mouth', '')
]
all_rows.append(row)
for item in all_rows:
print(item)
df = pd.DataFrame(all_rows, columns=['name', 'url', 'fur', 'eyes', 'mouth'])
print(df[['name', 'fur', 'eyes', 'mouth']])
結果:
name fur eyes mouth
0 None Robot X Eyes Discomfort
1 None Robot Blue Beams Grin
2 None Robot 3d Bored Cigarette
3 None Cheetah Bored Tongue Out
4 None Golden Brown Closed Phoneme L
5 None Brown X Eyes Dumbfounded
6 None Cream Crazy Bored
7 None Golden Brown Angry Bored
8 None Zombie Robot Bored
9 None Brown Sleepy Small Grin
10 None Dmt Eyepatch Bored
11 None Dark Brown Bloodshot Bored Unshaven Cigarette
# ...
uj5u.com熱心網友回復:
如果您只需要 1 個特征,則可以使用
[i['value'] for i in file['traits'] if i['trait_type'] == 'the trait type you need'][0]
您使用 for 回圈for i in file['traits']
創建一個串列,其中包含您需要的i['value']if 。i['trait_type']然后將串列中的第一項與[0]
否則,考慮
for i in file['traits']:
if i['trait_type'] == 'the_trait':
list_for_the_trait.append(i['value'])
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/513512.html
