(最終更新日:2023年12月)
✔このような方へ向けて書いた記事です
「pd dataframeとは具体的に何を指すのだろう?」
「pd dataframeの操作方法を理解したい」
「pd dataframeの具体的な処理例を視覚的に確認したい」
✔当記事でご紹介する内容
- pandas dataframeの基本概念
- pandas dataframeの操作法及びその応用
- pandas dataframeの実践的な使用例
当記事では、pandasのdataframeについて、その基本理念から、細部の操作方法、さらには高度な利用法に至るまでを、具体的な例を引用しながら丁寧に解説します。
ぜひ最後までお読みいただき、pd dataframeの活用につなげてください。
DataFrame(データフレーム)の基本
こちらでは、Pythonライブラリ「pandas」の主要なデータ構造である「DataFrame」の基本的な概念について解説します。
- 三つの柱:values, columns, index
- 行・列名のカスタマイズ
- 各列毎に異なるデータ型
三つの柱:values, columns, index
DataFrameは、Pythonのpandasライブラリで使用される2次元ラベル付きデータ構造のこと。
こつの主要な3つの構成要素があります。
- values: データフレームの内容を表し、通常は数値や文字列などのデータを含む
- columns: 各列のラベル(列名)を表す
- index: 各行のラベル(行名)を表す
これらの概念を理解することは、pandasを用いたデータ操作の基礎となります。
行・列名のカスタマイズ
pandasのDataFrameでは、行名(インデックス)や列名を自由にカスタマイズすることが可能です。
これにより、データ分析をおこなう際に、特定の行や列を直感的に指定しやすくなります。
例えば、DataFrameオブジェクトの.columns
や.index
プロパティを使って、列名や行名をリストとして与えることで、名前をカスタマイズ可能です。
各列毎に異なるデータ型
DataFrameの大きな特徴のひとつは、各列で異なるデータ型を持つことが可能であるという点です。
ひとつのDataFrame内で、ある列は整数型、別の列は浮動小数点型、また別の列は文字列型、といったように異なるデータ型を混在させられます。
これにより、さまざまなデータソースから得られる複雑なデータでも柔軟に扱えるのです。
DataFrameの作成:手順とサンプルコード
こちらでは、実際にDataFrameを作成する方法について詳しく解説します。
具体的なコード例とともに見ていきましょう。
- 二次元配列・リストからの作成
- 一次元配列・リストからの作成
- 辞書型の利用
- CSVやExcelデータからの読込
二次元配列・リストからの作成
二次元の配列やリストから、DataFrameを作成することは非常に直感的です。
pandas.DataFrame()コンストラクタに二次元の配列やリストを渡すだけ。
例えば、4×3の二次元リストをDataFrameに変換してみましょう。
各列には、.columnsプロパティを用いて名前を付けられます。
import pandas as pd
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
print(df)
このコードを実行すると、次のようなDataFrameが作成されます。
A B C
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
一次元配列・リストからの作成
一次元の配列やリストからも、DataFrameの作成が可能。
これは各リストがひとつの列を形成するDataFrameになります。
以下が一次元のリストからDataFrameを作成する例です。
import pandas as pd
data = [1, 2, 3, 4, 5]
df = pd.DataFrame(data, columns=['列名A'])
print(df)
このコードを実行すると、次のようなDataFrameが作成されます。
列名A
0 1
1 2
2 3
3 4
4 5
辞書型の利用
Pythonの辞書型(dict)を使ってDataFrameを作成することも可能です。
ただし以下のルールに注意しましょう。
- 辞書型のキーが列名となり、値がその列のデータとなる
- 値はリストや配列などの一次元データでなければいけない
例をご覧ください。
import pandas as pd
data = {'列あ': [1, 2, 3, 4, 5], '列い': [6, 7, 8, 9, 10], '列う': [11, 12, 13, 14, 15]}
df = pd.DataFrame(data)
print(df)
このコードを実行すると、次のようなDataFrameが作成されます。
列あ 列い 列う
0 1 6 11
1 2 7 12
2 3 8 13
3 4 9 14
4 5 10 15
CSVやExcelデータからの読込
Pandasでは、csvやExcelなどのファイルからデータを読み込んで、DataFrameを作成できます。
実際のデータ分析作業では、外部ファイルからのデータ読み込みが一般的だからです。
以下に、CSVファイルとExcelファイルからデータを読み込む例を示します。
# CSVファイルからデータを読み込む
df_from_csv = pd.read_csv('sample.csv')
# Excelファイルからデータを読み込む
df_from_excel = pd.read_excel('sample.xlsx')
これらの関数は、ファイルパスを引数として受け取り、ファイルの内容をDataFrameとして返します。
なお、Excelファイルからデータを読み込むには、追加のパッケージopenpyxl
またはxlrd
が必要です。
DataFrame操作:データの抽出、追加、削除
DataFrameを作成したら、次はデータの操作方法を見ていきましょう。
- 行・列・要素の選択・抽出および変更
- 行・列の追加と削除方法
- 行名(index)・列名(column)の指定
行・列・要素の選択・抽出および変更
DataFrameでは、特定の行や列、要素を選択・抽出・変更できます。
主な洗濯方法は以下のとおりです。
- 列を選択する: 列名を用いる
- 行を選択する: .locや.ilocを用いる
- 特定の要素を変更する: その行名と列名で指定する
以下に具体的なコードを示します。
# 列の選択
col_A = df['列名A']
# 行の選択
row_0 = df.loc[0]
row_0_iloc = df.iloc[0]
# 要素の変更
df.loc[0, '列名A'] = 100
locとilocの違いは、いくつかありますが、主には以下のとおり。
- ラベルの選択方法: locはインデックス名、ilocはインデックス番号で選択
- スライスの終点: locはスライスの終点を含む、ilocは含まない
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
# loc を使用
print(df.loc['a']) # インデックス 'a' のデータを取得
print(df.loc['a':'b']) # インデックス 'a' から 'b' のデータを取得
# iloc を使用
print(df.iloc[0]) # 0 番目の行のデータを取得
print(df.iloc[0:2]) # 0 番目から 1 番目(2 番目は含まない)の行のデータを取得
行・列の追加と削除方法
DataFrameに行や列を追加する方法、削除する方法について説明します。
- 行の追加: .locや.appendを使用
- 列の追加: 新しい列名を用いて直接割り当てる
- 行や列を削除: .dropを使用
# 行の追加
df.loc[5] = [6, 7, 8]
# 列の追加
df['D'] = [9, 10, 11, 12, 13, 14]
# 行の削除
df = df.drop(5)
# 列の削除
df = df.drop('D', axis=1) #axisは0で行、1で列を表します。
dropは、新しいDataFrameを返します。
元のDataFrameは変更になりませんので、注意しましょう。
行名(index)・列名(column)の指定
DataFrameの行名(index)や列名(column)は、DataFrameを操作する上で重要な役割を果たします。
以下がindex名やcolum名にまつわる操作です。
- これらの名前を指定: .indexと.columnsを使用
- 既存の列を行名に設定: .set_indexを、行名を列に戻すためには.reset_indexを使用
# 行名・列名の指定
df.index = ['row1', 'row2', 'row3', 'row4', 'row5']
df.columns = ['col1', 'col2', 'col3']
# 特定の列を行名に設定
df = df.set_index('col1')
# 行名を列に戻す
df = df.reset_index()
これらの基本的な操作を覚えておくと、DataFrameを自由自在に扱えます。
DataFrameの活用例:データ分析テクニック
こちらでは、DataFrameを活用したデータ分析の実際のテクニックについて紹介します。
- データ抽出とソート方法
- 時系列データの集計・分析
- WEBスクレイピングによるデータ収集と分析
- データの結合とピボットテーブル(クロス集計)分析
データ抽出とソート方法
DataFrameでは、特定の条件に基づいてデータを抽出したり、データをソートしたりできます。
これらは、データ分析の中でも非常に重要なステップです。
以下に具体的なコードを示します。
#サンプルデータ
import pandas as pd
# サンプルデータの作成
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [25, 30, 35, 40, 45],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix']
}
df = pd.DataFrame(data)
#サンプルフィルター
age_filter = df['Age'] >= 30
filtered_df = df[age_filter]
print(filtered_df)
#サンプルソート
sorted_df = df.sort_values(by='Age')
print(sorted_df)
#ソートを降順にする
sorted_df = df.sort_values(by='Age', ascending=False)
print(sorted_df)
時系列データの集計・分析
DataFrameは、時系列データの集計や分析にも使用できます。
具体的には、.resampleメソッドを使って、以下のようなことができます。
- 日単位、月単位、年単位などでデータを再サンプリング
- それぞれの期間での平均、最大値、最小値などを計算
例を見てみましょう。
#サンプルデータ
import pandas as pd
import numpy as np
# サンプルの時系列データを生成
rng = pd.date_range('2020-01-01', periods=365, freq='D')
df = pd.DataFrame({'Value': np.random.randn(len(rng))}, index=rng)
日単位での再サンプリング
日単位での平均、最大値、最小値を計算します。
# 日単位での平均
daily_mean = df.resample('D').mean()
# 日単位での最大値
daily_max = df.resample('D').max()
# 日単位での最小値
daily_min = df.resample('D').min()
月単位での再サンプリング
月単位での平均、最大値、最小値を計算します。
# 月単位での平均
monthly_mean = df.resample('M').mean()
# 月単位での最大値
monthly_max = df.resample('M').max()
# 月単位での最小値
monthly_min = df.resample('M').min()
年単位での再サンプリング
年単位での平均、最大値、最小値を計算します。
# 年単位での平均
yearly_mean = df.resample('Y').mean()
# 年単位での最大値
yearly_max = df.resample('Y').max()
# 年単位での最小値
yearly_min = df.resample('Y').min()
WEBスクレイピピングによるデータ収集と分析
DataFrameは、ウェブスクレイピングによるデータ収集と分析にも使用できます。
例えば、PythonのBeautifulSoup
ライブラリを使ってウェブページからデータを抽出し、それをDataFrameに格納して分析など、です。
以下に具体的なコードを示します。
# BeautifulSoupとrequestsライブラリをインポート
from bs4 import BeautifulSoup
import requests
# ウェブページのURL
url = 'https://www.example.com'
# requestsを使ってウェブページを取得
response = requests.get(url)
# BeautifulSoupでHTMLを解析
soup = BeautifulSoup(response.text, 'html.parser')
# ウェブページからデータを抽出
data = soup.find_all('div', class_='data_class')
# データをDataFrameに格納
df = pd.DataFrame(data)
データの結合とピボットテーブル(クロス集計)分析
DataFrameでは、異なるDataFrame同士を結合したり、ピボットテーブル(クロス集計)を作成したり、データ分析をおこなえます。
以下がその具体的なコードです。
# DataFrameの結合
df3 = pd.concat([df1, df2])
# 'A'列の値を'B'列の値ごとに集約し、'C'列の値をカラムとしたピボットテーブルを作成
pivot_table = df.pivot_table(values='A', index='B', columns='C')
ピボットテーブルは、データの集約やサマリーを作成する強力なツールです。
まとめ
以上が、DataFrameの基本的な使用方法と応用例についての基本事項です。
当記事が、Pythonのpandasライブラリを使ってデータ分析をおこなう際の参考になれば幸いです。
DataFrameは、その柔軟性と強力な機能により、データサイエンスの現場で広く使用されています。
当記事で紹介したテクニックを習得し、自身のデータ分析スキルを向上させましょう。