ホームページ バックエンド開発 Python チュートリアル Python では、数秒で Dataframe に変換するネストされた JSON が導入されました。

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

Dec 29, 2020 am 09:34 AM
dataframe json pandas python 情報処理

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

Pythonパラメーター注釈は文字列を使用できますか? Pythonパラメーター注釈は文字列を使用できますか? Apr 01, 2025 pm 08:39 PM

Pythonパラメーター注釈の代替使用Pythonプログラミングでは、パラメーターアノテーションは、開発者が機能をよりよく理解して使用するのに役立つ非常に便利な機能です...

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Apr 01, 2025 pm 11:30 PM

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトを書くときは、以前の出力をカーソル位置にクリアするのが一般的です...

PythonおよびOCRテクノロジーを使用して、複雑な検証コードをクラックしようとする方法は? PythonおよびOCRテクノロジーを使用して、複雑な検証コードをクラックしようとする方法は? Apr 01, 2025 pm 10:18 PM

毎日のネットワークインタラクションでPythonを使用したクラッキング検証コードの調査、検証コードは、自動化されたプログラムの悪意のある操作を防ぐための一般的なセキュリティメカニズムです...

GoogleとAWSはパブリックピピイメージソースを提供していますか? GoogleとAWSはパブリックピピイメージソースを提供していますか? Apr 01, 2025 pm 05:15 PM

多くの開発者はPypi(PythonPackageIndex)に依存しています...

Pythonクロスプラットフォームデスクトップアプリケーション開発:どのGUIライブラリが最適ですか? Pythonクロスプラットフォームデスクトップアプリケーション開発:どのGUIライブラリが最適ですか? Apr 01, 2025 pm 05:24 PM

Pythonクロスプラットフォームデスクトップアプリケーション開発ライブラリの選択多くのPython開発者は、WindowsシステムとLinuxシステムの両方で実行できるデスクトップアプリケーションを開発したいと考えています...

Python hourglassグラフ図面:可変未定義エラーを避ける方法は? Python hourglassグラフ図面:可変未定義エラーを避ける方法は? Apr 01, 2025 pm 06:27 PM

Python:Hourglassグラフィック図面と入力検証この記事では、Python NoviceがHourglass Graphic Drawingプログラムで遭遇する可変定義の問題を解決します。コード...

See all articles