Pythonのpd.DataFrameをさまざまなコード付きで徹底解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年12月)

✔このような方へ向けて書いた記事です

「pd dataframeとは具体的に何を指すのだろう?」
「pd dataframeの操作方法を理解したい」
「pd dataframeの具体的な処理例を視覚的に確認したい」

✔当記事でご紹介する内容

  • pandas dataframeの基本概念
  • pandas dataframeの操作法及びその応用
  • pandas dataframeの実践的な使用例

当記事では、pandasのdataframeについて、その基本理念から、細部の操作方法、さらには高度な利用法に至るまでを、具体的な例を引用しながら丁寧に解説します。

ぜひ最後までお読みいただき、pd dataframeの活用につなげてください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

DataFrame(データフレーム)の基本

こちらでは、Pythonライブラリ「pandas」の主要なデータ構造である「DataFrame」の基本的な概念について解説します。

  • 三つの柱:values, columns, index
  • 行・列名のカスタマイズ
  • 各列毎に異なるデータ型

三つの柱:values, columns, index

DataFrameは、Pythonのpandasライブラリで使用される2次元ラベル付きデータ構造のこと。

こつの主要な3つの構成要素があります。

  1. values: データフレームの内容を表し、通常は数値や文字列などのデータを含む
  2. columns: 各列のラベル(列名)を表す
  3. 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は、その柔軟性と強力な機能により、データサイエンスの現場で広く使用されています。

当記事で紹介したテクニックを習得し、自身のデータ分析スキルを向上させましょう。

タイトルとURLをコピーしました