🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3044閲覧

python json→csv変換について

hassy_rubio

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/03 07:54

前提・実現したいこと

pythonでネストしているjson文字列をcsvの変換して出力したいのですが
キーがA.B.Cといってように上の階層のキーも表示されてしまうので、防ぐ方法が知りたいです。
Cのみを表示させたいです。

発生している問題・エラーメッセージ

現在表示されてるCSV A.B.C 7 理想 C 7

該当のソースコード

python

1import pandas as pd 2import pandas.io.json import json_normalize 3import json 4import csv 5 6#json 7S='{"A":{"B":{"C":7}}}' 8 9#json文字列を辞書に変換 10D=json.loads(S) 11 12#データフレームに変換 13df=json_normalize(D) 14 15#CSV出力 16df.to_csv("TEST.csv")

試したこと

pd.DateFrameでの出力を試しましたが明らかに違いました。

補足情報(FW/ツールのバージョンなど)

python3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Python

1#json 2S='{"A":{"B":{"C":7}}}' 3 4#json文字列を辞書に変換 5D=json.loads(S) 6 7#データフレームに変換 8df=json_normalize(D) 9print(df) 10# A.B.C 11#0 7 12 13col = [] 14for c in df.columns: 15 col.append(c.split('.')[-1]) 16 17df.columns = col 18print(df) 19# C 20#0 7

投稿2020/12/03 10:31

meg_

総合スコア10739

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

A.B.C という列名をあとから C にしたいのであれば、列名を正規表現でリネームすればいいと思います。

python

1import pandas as pd 2import json 3 4json_str = '{"A":{"B":{"C":7}}}' 5json_dict = json.loads(json_str) 6df = pd.json_normalize(json_dict ) 7 8df.columns = df.columns.str.replace(".+.(.+)", r"\1", regex=True) 9print(df)

投稿2020/12/03 08:12

編集2020/12/03 09:04
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hassy_rubio

2020/12/03 08:52

回答ありがとうございます! このリネームの方法ですと、列名が複数の場合全ての列名が変換されてしまいませんか?
tiitoi

2020/12/03 08:58 編集

実際のデータがどうなっているのかわからないのですが、A.B.C となってしまう列名を C だけにしたいという質問ではないのでしょうか? > 列名が複数の場合全ての列名が変換されてしまいませんか? A.B.C A.B.D のように一番ネストが深い部分のキーが重複していなければ大丈夫です。 重複していると上手くいきません。
hassy_rubio

2020/12/03 09:10

何度も質問して申し訳ございません。 regex=Trueを記入していると「TypeError:replace() got an unexpected keyword argument 'regex'」とエラーが起こってしまいます。 regexを外すとうまくいくのですが、他の列名もリネームされてしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問