Python チュートリアルこのコラムでは、JSON をネストする方法を紹介します
推奨 (無料):##Python チュートリアル
APIを呼び出すと、
を使用すると、ドキュメント データベースはネストされたJSON
オブジェクトを返します。 Pythonがネストされた構造内のキーを列に変換しようとすると、
pandasにロードされたデータは、多くの場合次の結果を取得します:
df = pd.DataFrame.from_records(results [“ issues”],columns = [“ key”,“ fields”])
JSON構造を返し、注目するキーが実際にオブジェクト内の異なるレベルにあることです。
JSON構造は次のようになります。
JSON構造内の 4 つの異なるネスト レベルに順番にあります。
{ "expand": "schema,names", "issues": [ { "fields": { "issuetype": { "avatarId": 10300, "description": "", "id": "10005", "name": "New Feature", "subtask": False }, "status": { "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.", "id": "5", "name": "Resolved", "statusCategory": { "colorName": "green", "id": 3, "key": "done", "name": "Done", } }, "summary": "Recovered data collection Defraglar $MFT problem" }, "id": "11861", "key": "CAE-160", }, { "fields": { ... more issues], "maxResults": 5, "startAt": 0, "total": 160 }
1 つのオプションは、直接コーディングして特定のフィールドを検索する関数を記述することですが、問題は、各埋め込みフィールドをこの関数を呼び出してフィールドを設定し、
DataFrameの新しい列に対して.apply
を呼び出します。必要なフィールドをいくつか取得するために、まず列のフィールド キーのオブジェクトを抽出します。
df = ( df["fields"] .apply(pd.Series) .merge(df, left_index=True, right_index = True) )
上の表からわかるように、利用できるのは概要のみです。 issuetype、status など。ネストされたオブジェクトにまだ埋もれています。
以下は issuetype の名前を抽出するメソッドです。
# 提取issue type的name到一个新列叫"issue_type" df_issue_type = ( df["issuetype"] .apply(pd.Series) .rename(columns={"name": "issue_type_name"})["issue_type_name"] ) df = df.assign(issue_type_name = df_issue_type)
上記と同様、ネスト レベルが多すぎる場合は、再帰を自分で実装する必要があります。これは、ネストの各レベルで上記のようなメソッドを呼び出して解析し、新しい列に追加する必要があるためです。
プログラミングの基礎が弱い友達にとって、プログラミングの基礎を学ぶのは実はかなり面倒で、特にデータアナリストにとっては、データを活用したいと考えたとき、分析用の構造化データを早く入手したいと考えます。
現在、Dong 兄弟は
pandas組み込みソリューションを共有しています。
pandas
には、.json_normalize
という素晴らしい組み込み関数があります。
のドキュメントには、半構造化されたJSON
データをフラット テーブルに正規化することが記載されています。前のソリューションのすべてのコードは、この組み込み関数を使用してわずか 3 行で完了できます。手順は非常に簡単で、次の使用法を理解するだけです。
必要なフィールドを決定し、. 記号を使用してネストされたオブジェクトを接続します。
処理したいネストされたリスト (ここでは
results["issues"]) をパラメーターとして.json_normalize
に入力します。定義した FIELDS リストをフィルタリングします。
FIELDS = ["key", "fields.summary", "fields.issuetype.name", "fields.status.name", "fields.status.statusCategory.name"] df = pd.json_normalize(results["issues"]) df[FIELDS]
はい、とても簡単です。
その他の操作レコード パス
results["issues"]## を渡すことに加えて、上 #リストに加えて、
record_pathパラメータを使用して、
JSONオブジェクト内のリストのパスを指定します。
# 使用路径而不是直接用results["issues"] pd.json_normalize(results, record_path="issues")[FIELDS]
カスタム区切り文字
sep パラメータを使用して、ネスト構造接続の区切り文字をカスタマイズすることもできます。たとえば、デフォルトの「.」を「-」に置き換えます。下に 。
### 用 "-" 替换默认的 "." FIELDS = ["key", "fields-summary", "fields-issuetype-name", "fields-status-name", "fields-status-statusCategory-name"] pd.json_normalize(results["issues"], sep = "-")[FIELDS]
再帰の制御
各サブオブジェクトを再帰したくない場合は、max_level
パラメーターを使用して、深さ。この場合、statusCategory.nameフィールドは
JSONオブジェクトのレベル 4 にあるため、結果の
DataFrameには含まれません。
# 只深入到嵌套第二级 pd.json_normalize(results, record_path="issues", max_level = 2)
以下は、
.json_normalize の
pandas公式ドキュメントの説明です。理解できない場合は、自分で学習してください。今回は、Dong 兄弟が説明します。ここでそれを紹介します。
pandas 公式ドキュメント: https://pandas.pydata.org/pan...
以上がPython では、数秒で Dataframe に変換するネストされた JSON が導入されました。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。