[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
パラメータには、inner
、outer
、left
、right
などのオプションがあります。
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
パラメータには、inner
、outer
、left
、right
などのオプションがあります。
これで、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を使ったデータ操作のスキルを向上させてみてください。