0
0

【Python】pandasを利用してCSV列にあるJSON構造の中から、指定データを新規列へ取得する方法

Posted at

概要

Pythonのpandasを利用して、CSVファイルの列にあるJSON構造のデータから、指定したものを取り出すコードを実装しました。

サンプルコード

前提として、sample_body列の中にJSON構造のデータがあるとします。また、その中のデータは以下のようになっています。

{
	"information": {
		"sample_no": "123456789",
        # ...略...

CSVファイルの一番左の列に、新規にsample_noという列を作成し、それに紐づく123456789という値を入れるコードが以下です。

pandasライブラリを利用して、DataFrameの各行からデータを抽出し、その値を新しい列としてDataFrameに追加しています。

import pandas as pd
import json


def get_sample_no(row):
    sample_body = json.loads(row['sample_body'])
    return sample_body['information']['sample_no']

df_temp = df.apply(get_sample_no, axis=1)
df_temp.name = 'sample_no'

df = pd.concat([df_temp, df], axis=1)

df.to_csv(xxxx_csv_path_xxxx, index=False)

詳細

  • df.apply(get_sample_no, axis=1)で、DataFrame(=表のようなもの。後述)の各行にget_sample_no関数を適用します
    • axis=1は、関数を各行に適用、axis=0だと各列に適用することを意味します
    • 結果は、df_tempという新しいPandas Series(=1列分のデータのようなもの。後述)に格納されます
  • pd.concat([df_temp, df], axis=1)で、concat関数を使用して、2つのDataFrame(またはSeries)を列方向(axis=1)に結合しています
    • axis=1の指定により、df_tempdfの左側、つまり新しいDataFrameの最初の列に追加されます。これにより、CSVファイルの一番左の列に新規列を追加することができます。concat関数は、引数として与えられたリストの順序を保持したまま結合する関数
  • df.to_csv(xxxx_csv_path_xxxx, index=False)で、CSVファイルに出力します
    • to_csvは、DataFrameの内容をCSVファイルとして出力するメソッド。出力するCSVファイルのパス名を指定します。また、index=FalseによりDataFrameのインデックス(行ラベル)をCSVファイルに出力しないように指定できます。デフォルトではTrueなのでインデックスが表示される設定になっています

参考

上述のPandas Seriesについて。

pandas でよく使われるデータ構造として1次元の Series(シリーズ)、2次元の DataFrame(データフレーム)があります。
表のようなものが DataFrame 、表の1列分のデータを抜き出したものが Seriesです。
引用元:https://docs.pyq.jp/python/pydata/pandas/series.html

こちらがより詳細に解説されています。

Pandasドキュメントはこちら

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0