Python では、数秒で Dataframe に変換するネストされた JSON が導入されました。

coldplay.xixi
リリース: 2020-12-29 09:34:39
オリジナル
3340 人が閲覧しました

Python チュートリアルこのコラムでは、JSON をネストする方法を紹介します

Python では、数秒で Dataframe に変換するネストされた JSON が導入されました。

推奨 (無料):##Python チュートリアル

APIを呼び出すと、を使用すると、ドキュメント データベースはネストされたJSONオブジェクトを返します。 Pythonがネストされた構造内のキーを列に変換しようとすると、pandasにロードされたデータは、多くの場合次の結果を取得します:

df = pd.DataFrame.from_records(results [“ issues”],columns = [“ key”,“ fields”])
ログイン後にコピー
説明: ここでの結果は非常に大きくなります。 Dictionary , issues は結果のキーであり、issues の値はネストされた JSON オブジェクト ディクショナリのリストです。JSON のネストされた構造については後で説明します。
問題は、API がネストされた

JSON構造を返し、注目するキーが実際にオブジェクト内の異なるレベルにあることです。

ネストされた

JSON構造は次のようになります。

私たちが望んでいるのは次のとおりです。

以下では、API によって返されるデータを例として取り上げます。API には通常、フィールドに関するメタデータが含まれています。これらが必要なフィールドであるとしましょう。

    key: JSON キー、第 1 レベル。
  • summary: 第 2 レベルの「フィールド」オブジェクト。
  • ステータス名: 第 3 レベルのポジション。
  • statusカテゴリ名: 4 番目の入れ子レベルにあります。
上記のように、抽出することを選択したフィールドは、課題リストの

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という素晴らしい組み込み関数があります。

pandas

のドキュメントには、半構造化された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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!