Pandas

[Python] Pandas – DataFrameを作成・追加する方法

PandasでDataFrameを作成するには、pd.DataFrame()を使用します。

例えば、辞書形式でデータを渡すと、キーが列名、値がデータになります。

df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})のように作成できます。

既存のDataFrameに行を追加するには、df.loc[]df.append()を使いますが、append()は非推奨となっており、代わりにpd.concat()を使用することが推奨されています。

DataFrameの基本的な作成方法

PandasのDataFrameは、データを表形式で扱うための非常に便利な構造です。

ここでは、さまざまな方法でDataFrameを作成する方法を紹介します。

リストからDataFrameを作成する

リストを使ってDataFrameを作成するには、pd.DataFrame()を使用します。

以下は、リストからDataFrameを作成する例です。

import pandas as pd
# リストを定義
data = [
    ['山田', 25],
    ['佐藤', 30],
    ['鈴木', 22]
]
# DataFrameを作成
df = pd.DataFrame(data, columns=['名前', '年齢'])
print(df)
   名前  年齢
0  山田   25
1  佐藤   30
2  鈴木   22

辞書からDataFrameを作成する

辞書を使ってDataFrameを作成することもできます。

辞書のキーが列名、値がその列のデータになります。

import pandas as pd
# 辞書を定義
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22]
}
# DataFrameを作成
df = pd.DataFrame(data)
print(df)
   名前  年齢
0  山田   25
1  佐藤   30
2  鈴木   22

NumPy配列からDataFrameを作成する

NumPy配列を使ってDataFrameを作成することも可能です。

以下の例では、NumPyを使って2次元配列を作成し、それをDataFrameに変換します。

import pandas as pd
import numpy as np
# NumPy配列を定義
data = np.array([
    ['山田', 25],
    ['佐藤', 30],
    ['鈴木', 22]
])
# DataFrameを作成
df = pd.DataFrame(data, columns=['名前', '年齢'])
print(df)
   名前  年齢
0  山田   25
1  佐藤   30
2  鈴木   22

CSVファイルからDataFrameを作成する

CSVファイルからDataFrameを作成するには、pd.read_csv()を使用します。

以下は、CSVファイルを読み込む例です。

import pandas as pd
# CSVファイルからDataFrameを作成
df = pd.read_csv('data.csv')
print(df)

ExcelファイルからDataFrameを作成する

ExcelファイルからDataFrameを作成するには、pd.read_excel()を使用します。

以下は、Excelファイルを読み込む例です。

import pandas as pd
# ExcelファイルからDataFrameを作成
df = pd.read_excel('data.xlsx')
print(df)

JSONデータからDataFrameを作成する

JSONデータからDataFrameを作成するには、pd.read_json()を使用します。

以下は、JSONデータを読み込む例です。

import pandas as pd
# JSONデータを定義
data = '''
[
    {"名前": "山田", "年齢": 25},
    {"名前": "佐藤", "年齢": 30},
    {"名前": "鈴木", "年齢": 22}
]
'''
# JSONデータからDataFrameを作成
df = pd.read_json(data)
print(df)
名前  年齢
0  山田   25
1  佐藤   30
2  鈴木   22

これで、さまざまな方法でDataFrameを作成する方法を学びました。

次のセクションでは、DataFrameに列や行を追加する方法について説明します。

DataFrameの列・行の追加方法

PandasのDataFrameに列や行を追加することは、データの操作において非常に重要です。

ここでは、列と行を追加するさまざまな方法を紹介します。

列を追加する方法

DataFrameに新しい列を追加する方法はいくつかあります。

直接列を追加する

新しい列を直接指定して追加することができます。

以下の例では、年齢列に1を加えた年齢+1という新しい列を追加します。

import pandas as pd
# DataFrameを作成
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22]
}
df = pd.DataFrame(data)
# 新しい列を追加
df['年齢+1'] = df['年齢'] + 1
print(df)
   名前  年齢  年齢+1
0  山田   25     26
1  佐藤   30     31
2  鈴木   22     23

計算結果を新しい列として追加する

計算結果を基に新しい列を追加することもできます。

以下の例では、年齢列を2倍にした年齢*2という新しい列を追加します。

import pandas as pd
# DataFrameを作成
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22]
}
df = pd.DataFrame(data)
# 計算結果を新しい列として追加
df['年齢*2'] = df['年齢'] * 2
print(df)
   名前  年齢  年齢*2
0  山田   25     50
1  佐藤   30     60
2  鈴木   22     44

行を追加する方法

DataFrameに行を追加する方法もいくつかあります。

loc[]を使って行を追加する

loc[]を使って特定のインデックスに行を追加することができます。

以下の例では、新しい行をインデックス3に追加します。

import pandas as pd
# DataFrameを作成
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22]
}
df = pd.DataFrame(data)
# locを使って行を追加
df.loc[3] = ['田中', 28]
print(df)
   名前  年齢
0  山田   25
1  佐藤   30
2  鈴木   22
3  田中   28

concat()を使って行を追加する

concat()を使って複数のDataFrameを結合することもできます。

以下の例では、別のDataFrameを結合して新しい行を追加します。

import pandas as pd
# 元のDataFrameを作成
data1 = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22]
}
df1 = pd.DataFrame(data1)
# 追加するDataFrameを作成
data2 = {
    '名前': ['田中'],
    '年齢': [28]
}
df2 = pd.DataFrame(data2)
# concatを使って行を追加
df = pd.concat([df1, df2], ignore_index=True)
print(df)
   名前  年齢
0  山田   25
1  佐藤   30
2  鈴木   22
3  田中   28

append()を使って行を追加する(非推奨)

append()メソッドを使って行を追加することもできますが、非推奨とされています。

以下の例では、append()を使って新しい行を追加します。

import pandas as pd
# 元のDataFrameを作成
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22]
}
df = pd.DataFrame(data)
# appendを使って行を追加
new_row = pd.DataFrame({'名前': ['田中'], '年齢': [28]})
df = df.append(new_row, ignore_index=True)
print(df)
   名前  年齢
0  山田   25
1  佐藤   30
2  鈴木   22
3  田中   28

これで、DataFrameに列や行を追加する方法を学びました。

次のセクションでは、DataFrameの初期化とインデックス設定について説明します。

DataFrameの初期化とインデックス設定

DataFrameを作成する際、インデックスの設定はデータの管理や操作において重要な役割を果たします。

ここでは、インデックスの指定、リセット、変更方法について説明します。

インデックスを指定してDataFrameを作成する

DataFrameを作成する際に、インデックスを指定することができます。

以下の例では、名前をインデックスとして指定しています。

import pandas as pd
# データを定義
data = {
    '年齢': [25, 30, 22],
    '性別': ['男', '女', '男']
}
# インデックスを指定してDataFrameを作成
df = pd.DataFrame(data, index=['山田', '佐藤', '鈴木'])
print(df)
年齢 性別
山田   25  男
佐藤   30  女
鈴木   22  男

インデックスをリセットする方法

既存のインデックスをリセットして、デフォルトの整数インデックスに戻すことができます。

reset_index()メソッドを使用します。

import pandas as pd
# データを定義
data = {
    '年齢': [25, 30, 22],
    '性別': ['男', '女', '男']
}
df = pd.DataFrame(data, index=['山田', '佐藤', '鈴木'])
# インデックスをリセット
df_reset = df.reset_index()
print(df_reset)
index  年齢 性別
0   山田   25  男
1   佐藤   30  女
2   鈴木   22  男

注意: reset_index()を使用すると、元のインデックスが新しい列として追加されます。

元のインデックスを削除したい場合は、drop=Trueを指定します。

df_reset = df.reset_index(drop=True)
print(df_reset)
年齢 性別
0   25  男
1   30  女
2   22  男

インデックスを変更する方法

DataFrameのインデックスを変更するには、set_index()メソッドを使用します。

以下の例では、年齢列をインデックスとして設定します。

import pandas as pd
# データを定義
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22]
}
df = pd.DataFrame(data)
# 年齢をインデックスに設定
df_set_index = df.set_index('年齢')
print(df_set_index)
名前
年齢     
25  山田
30  佐藤
22  鈴木

注意: set_index()を使用すると、指定した列がインデックスとして設定され、元の列はDataFrameから削除されます。

元の列を保持したい場合は、drop=Falseを指定します。

df_set_index = df.set_index('年齢', drop=False)
print(df_set_index)
    名前  年齢
年齢        
25  山田  25
30  佐藤  30
22  鈴木  22

これで、DataFrameの初期化とインデックス設定について学びました。

次のセクションでは、DataFrameのデータ型と型変換について説明します。

DataFrameのデータ型と型変換

PandasのDataFrameでは、各列に異なるデータ型が存在します。

データ型を理解し、必要に応じて型変換を行うことは、データ分析において重要です。

ここでは、データ型の確認、指定、変換方法について説明します。

データ型を確認する方法

DataFrameの各列のデータ型を確認するには、dtypes属性を使用します。

以下の例では、DataFrameのデータ型を確認します。

import pandas as pd
# データを定義
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22],
    '入社日': ['2020-01-15', '2019-03-22', '2021-07-01']
}
df = pd.DataFrame(data)
# データ型を確認
print(df.dtypes)
名前        object
年齢         int64
入社日      object
dtype: object

データ型を指定してDataFrameを作成する

DataFrameを作成する際に、各列のデータ型を指定することができます。

以下の例では、年齢を整数型、入社日を文字列型として指定しています。

import pandas as pd
# データを定義
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22],
    '入社日': ['2020-01-15', '2019-03-22', '2021-07-01']
}
# DataFrameを作成し、データ型を指定
df = pd.DataFrame(data, dtype='object')
print(df.dtypes)
名前        object
年齢        object
入社日      object
dtype: object

データ型を変換する方法

DataFrameのデータ型を変換するには、astype()メソッドを使用します。

以下の例では、年齢列を整数型に変換します。

astype()を使った型変換

import pandas as pd
# データを定義
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': ['25', '30', '22'],  # 文字列型で定義
}
df = pd.DataFrame(data)
# 年齢を整数型に変換
df['年齢'] = df['年齢'].astype(int)
print(df.dtypes)
名前     object
年齢      int64
dtype: object

pd.to_datetime()を使った日付型への変換

日付データを扱う際には、pd.to_datetime()を使用して文字列を日付型に変換することができます。

以下の例では、入社日列を日付型に変換します。

import pandas as pd
# データを定義
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '入社日': ['2020-01-15', '2019-03-22', '2021-07-01']
}
df = pd.DataFrame(data)
# 入社日を日付型に変換
df['入社日'] = pd.to_datetime(df['入社日'])
print(df.dtypes)
名前               object
入社日    datetime64[ns]
dtype: object

これで、DataFrameのデータ型と型変換について学びました。

次のセクションでは、DataFrameの結合とマージについて説明します。

DataFrameの結合とマージ

Pandasでは、複数のDataFrameを結合したりマージしたりすることができます。

これにより、異なるデータソースを統合して分析することが可能になります。

ここでは、concat()merge()join()を使ったDataFrameの結合とマージ方法について説明します。

concat()を使ったDataFrameの結合

concat()関数を使用すると、複数のDataFrameを縦または横に結合することができます。

以下の例では、2つのDataFrameを縦に結合します。

import pandas as pd
# 1つ目のDataFrameを作成
data1 = {
    '名前': ['山田', '佐藤'],
    '年齢': [25, 30]
}
df1 = pd.DataFrame(data1)
# 2つ目のDataFrameを作成
data2 = {
    '名前': ['鈴木', '田中'],
    '年齢': [22, 28]
}
df2 = pd.DataFrame(data2)
# concatを使ってDataFrameを結合
df_concat = pd.concat([df1, df2], ignore_index=True)
print(df_concat)
   名前  年齢
0  山田   25
1  佐藤   30
2  鈴木   22
3  田中   28

注意: ignore_index=Trueを指定すると、インデックスがリセットされます。

merge()を使ったDataFrameのマージ

merge()関数を使用すると、共通の列を基にDataFrameをマージすることができます。

以下の例では、名前列を基に2つのDataFrameをマージします。

import pandas as pd
# 1つ目のDataFrameを作成
data1 = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22]
}
df1 = pd.DataFrame(data1)
# 2つ目のDataFrameを作成
data2 = {
    '名前': ['山田', '鈴木', '田中'],
    '性別': ['男', '男', '女']
}
df2 = pd.DataFrame(data2)
# mergeを使ってDataFrameをマージ
df_merge = pd.merge(df1, df2, on='名前', how='inner')
print(df_merge)
   名前  年齢 性別
0  山田   25  男
1  鈴木   22  男

howパラメータには、innerouterleftrightなどのオプションがあります。

join()を使ったDataFrameの結合

join()メソッドを使用すると、インデックスを基にDataFrameを結合することができます。

以下の例では、インデックスを基に2つのDataFrameを結合します。

import pandas as pd
# 1つ目のDataFrameを作成
data1 = {
    '年齢': [25, 30, 22]
}
df1 = pd.DataFrame(data1, index=['山田', '佐藤', '鈴木'])
# 2つ目のDataFrameを作成
data2 = {
    '性別': ['男', '女', '男']
}
df2 = pd.DataFrame(data2, index=['山田', '鈴木', '田中'])
# joinを使ってDataFrameを結合
df_join = df1.join(df2, how='inner')
print(df_join)
    年齢 性別
山田  25  男
鈴木  22  女

howパラメータには、innerouterleftrightなどのオプションがあります。

これで、DataFrameの結合とマージについて学びました。

次のセクションでは、DataFrameの応用例について説明します。

DataFrameの応用例

PandasのDataFrameは、データ分析や処理において非常に強力なツールです。

ここでは、DataFrameの応用例をいくつか紹介します。

複数のDataFrameを一つにまとめる

複数のDataFrameを一つにまとめるには、concat()merge()を使用します。

以下の例では、異なるデータソースからのDataFrameをconcat()でまとめます。

import pandas as pd
# 1つ目のDataFrameを作成
data1 = {
    '名前': ['山田', '佐藤'],
    '年齢': [25, 30]
}
df1 = pd.DataFrame(data1)
# 2つ目のDataFrameを作成
data2 = {
    '名前': ['鈴木', '田中'],
    '年齢': [22, 28]
}
df2 = pd.DataFrame(data2)
# 複数のDataFrameをまとめる
df_combined = pd.concat([df1, df2], ignore_index=True)
print(df_combined)
   名前  年齢
0  山田   25
1  佐藤   30
2  鈴木   22
3  田中   28

条件に基づいて行を追加する

条件に基づいて行を追加することも可能です。

以下の例では、年齢が25歳以上の人を新しいDataFrameに追加します。

import pandas as pd
# DataFrameを作成
data = {
    '名前': ['山田', '佐藤', '鈴木', '田中'],
    '年齢': [25, 30, 22, 28]
}
df = pd.DataFrame(data)
# 条件に基づいて行を追加
df_over_25 = df[df['年齢'] >= 25]
print(df_over_25)
   名前  年齢
0  山田   25
1  佐藤   30
3  田中   28

列の計算結果を新しいDataFrameに追加する

計算結果を基に新しいDataFrameを作成することもできます。

以下の例では、年齢を2倍にした新しい列を追加します。

import pandas as pd
# DataFrameを作成
data = {
    '名前': ['山田', '佐藤', '鈴木'],
    '年齢': [25, 30, 22]
}
df = pd.DataFrame(data)
# 年齢を2倍にした新しい列を追加
df['年齢*2'] = df['年齢'] * 2
print(df)
   名前  年齢    年齢*2
0  山田   25     50
1  佐藤   30     60
2  鈴木   22     44

外部データベースからデータを取得してDataFrameを作成する

Pandasを使用して外部データベースからデータを取得し、DataFrameを作成することもできます。

以下の例では、SQLiteデータベースからデータを取得します。

import pandas as pd
import sqlite3
# SQLiteデータベースに接続
conn = sqlite3.connect('example.db')
# SQLクエリを実行してDataFrameを作成
df = pd.read_sql_query("SELECT * FROM users", conn)
# データベース接続を閉じる
conn.close()
print(df)

注意: 上記のコードは、example.dbというSQLiteデータベースが存在し、usersというテーブルがあることを前提としています。

これで、DataFrameの応用例について学びました。

次のセクションでは、よくある質問にお答えします。

まとめ

この記事では、PandasのDataFrameを作成・操作するための基本的な方法から応用例までを紹介しました。

具体的には、DataFrameの作成方法、列や行の追加、インデックスの設定、データ型の確認と変換、そしてDataFrameの結合やマージの手法について詳しく解説しました。

これらの知識を活用することで、データ分析や処理の効率を高めることができるでしょう。

ぜひ、実際のデータを使ってこれらのテクニックを試し、Pandasを使ったデータ操作のスキルを向上させてみてください。

関連記事

Back to top button