Excelからの列単位のJSONデータをPythonを使用して階層構造に変換する

マリオ・グロナート

全体的な目標

私の全体的な目標は、Excelファイルからの入力をテキストファイル(Stata .doファイル)に変換して、ほぼ同じ構造を持つが、データの特異な性質のために個別の処理を必要とする一連のデータ調和タスクを実行することです(全国調査)。調和はさまざまな人によって実行され、Excelは人々が同じ構造を使用することを保証します。私の戦略は、ExcelファイルをJSON構造で読み取り、この構造を使用してdoファイルに書き込むことです。

私が助けを求めるタスク

私が今解決しようとしている問題は、JSONがExcelから読み取るときにJSONの列構造から階層構造に移行する方法です。ユーザーに持たせたいExcelファイルは、ブロックとブロック内のタスクの構造を持ち、タスクを実行するために必要な特定のコマンド(1行以上)があります。以下の画像は、Excelドキュメントの例です。

ユーザーコードのExcelファイル構造

最終的な目標は、次のようなテキストファイルを作成することです。

* A 

* A1    
Command for A1
        
* A2    
Command for A2 (1)
Command for A2 (2)
        
* B 

* B1    
Command for B1 (1)
Command for B1 (2)
Command for B1 (3)
        
*B2 
Command for B2 (1)
Command for B2 (2)

私はPythonを使用して、次のコードを使用してこれを読み取ります。

path = "Some Path/test.xlsx"
import pandas
import json

x = pandas.read_excel(path, sheet_name='Sheet')
json_str = x.to_json()

前述のように、これによりJSONの列構造が生成されます。これは次のようになります。

Excelファイルを読み取るだけのJSON構造

私が苦労しているのは、これをコードが自然に持つ階層構造に変換することです。私の希望する出力は、次の形式のJSONオブジェクトです。

必要なJSON構造

全体的な目標を達成するためのよりスマートな方法があれば、それを知ってうれしいですが、この翻訳は情報を構造化するために必要なステップだと思いました。

再現性のためにJSONオブジェクトを生成するコードは次のとおりです

# Column-wise object
'{"Block":{"0":"* A","1":null,"2":null,"3":null,"4":null,"5":null,"6":"* B","7":null,"8":null,"9":null,"10":null,"11":null},"Task":{"0":"* A1","1":null,"2":null,"3":"* A2","4":null,"5":null,"6":"* B1","7":null,"8":null,"9":null,"10":"*B2","11":null},"Code":{"0":"Command for A1","1":null,"2":null,"3":"Command for A2 (1)","4":"Command for A2 (2)","5":null,"6":"Command for B1 (1)","7":"Command for B1 (2)","8":"Command for B1 (3)","9":null,"10":"Command for B2 (1)","11":"Command for B2 (2)"}}'

# Hierarchical object
'{"* A": {"* A1": ["Command for A1"], "* A2": ["Command for A2 (1)", "Command for A2 (2)"] }, "* B" : {"* B1" : ["Command for B1 (1)", "Command for B1 (2)", "Command for B1 (3)"], "* B2" : ["Command for B2 (1)", "Command for B2 (2)"]}}'
デビッドM。

あなたはこのようにそれを行うことができます:

import pandas as pd
import json
from collections import defaultdict

path = "Some Path/test.xlsx"
df = pd.read_excel(path,
                   engine='openpyxl',
                   # header=None, names=['Block', 'Task', 'Code']  # only if your file has no headers
                   )

df.dropna(inplace=True, axis=0, how='all')
df.fillna(method='ffill', inplace=True, axis=0)
df = df.set_index(['Block', 'Task'])

nested_dict = defaultdict(lambda : defaultdict(list))

for keys, value in df.Code.iteritems():
    nested_dict[keys[0]][keys[1]].append(value)

json_str = json.dumps(nested_dict, indent=4, sort_keys=True)
print(json_str)

出力:

{
    "* A": {
        "* A1": [
            "Command for A1"
        ],
        "* A2": [
            "Command for A2 (1)",
            "Command for A2 (2)"
        ]
    },
    "* B": {
        "* B1": [
            "Command for B1 (1)",
            "Command for B1 (2)",
            "Command for B1 (3)"
        ],
        "* B2": [
            "Command for B2 (1)",
            "Command for B2 (2)"
        ]
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

C#を使用してデータテーブルを階層データ構造(JSON)に変換する

XSLT:XSLTを使用してxmlデータを階層構造に変換する方法

階層構造でデータの表現については、Java 8のツリー構造にPOJOを変換します

Pythonで階層データを特定のjson形式に変換する

階層構造の辞書をリストに変換する

パンダまたはExcelライターを使用して、2つの列を1つの階層構造にマージします

オブジェクト配列を階層データ構造に変換する

PHPを使用して単純な配列を新しいデータ構造に変換する

パンダの階層データフレームをJSONに変換する

構造体からデータをループし、それを文字列の配列に変換してCSVを作成する

PythonとPandasを使用してSalesforceのordereddict階層からデータを抽出する方法

SQLServerから階層データをJSONとして取得する

BigQueryにアップロードするための構造体と配列構造を使用したPandasデータフレームのJSONへの変換

pysparkを使用してデータフレーム列をネストされたJSON構造に変換する

1つの列から階層データを抽出します

PHP要素が同じIDインデックスに属している場合、配列データ構造を別の構造に変換しますか?

フラットなjson構造を階層構造に変換します

forEachループを使用してJSのデータ構造を変換する

Pythonを使用して、データを複数の列から単一の列に変換し、列Aを繰り返す必要があります

パンダを使用してPythonでJSON構造をデータフレームに変換する

MYSQLからデータを読み取り、DynamoDBに配置する際の「循環構造のJSONへの変換」

Pythonを使用して、区切られた文字列と値を階層JSONに変換します

Python:カテゴリデータを使用して複数の列を単一の列に変換する

フラット構造を階層構造に変換する

階層CSVデータをJSONに変換する

配列構造を維持しながらjqを使用してtsvの配列でJSONを変換するにはどうすればよいですか?

階層パスの配列をJSONに変換します

Cを使用して、データベースから構造体のポインタ変数の配列に文字列を割り当てて読み取る方法

SQL サーバーのテーブル データを列構造から別の列構造に変換する

TOP 一覧

  1. 1

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  2. 2

    ソートされた検索、ターゲット値未満の数をカウント

  3. 3

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    Ansibleで複数行のシェルスクリプトを実行する方法

  6. 6

    Reactでclsxを使用する方法

  7. 7

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  8. 8

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  9. 9

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  10. 10

    PowerShellの分割ファイルへのヘッダーの追加

  11. 11

    Chromeウェブアプリのウェブビューの高さの問題

  12. 12

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  13. 13

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  14. 14

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  15. 15

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  16. 16

    MLでのデータ前処理の背後にある直感

  17. 17

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  20. 20

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  21. 21

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

ホットタグ

アーカイブ