2024.09.09 7 min read Python / Pandas / データ分析

Pandasに少しだけ触れた

Pandas を使う機会があったので備忘録として。DataFrame の作成・CSV 読み書き・列/行の選択・フィルタリング・欠損値処理・ソートなど、基本操作を一通り試したメモ。

PythonPandasデータ分析

はじめに

Pandasを使用する機会がありましたので、備忘録として記載します。

Pandasとは

  • データ解析作業を行うためのオープンソースの Python ライブラリ
  • 機械学習でのデータ加工によく使用されるらしい
  • 名前にPandaとあるがパンダとは関係はないらしい

アドベンチャーワールドで撮影したパンダ

アドベンチャーワールドで撮影したパンダ

具体的になにができるの?

  • データの読み込みと書き込み: CSV、Excel、SQLデータベース、JSON、Parquetなど、多様な形式のデータを読み込み・書き込み
  • データの操作: データフレーム(2次元の表形式データ)やシリーズ(1次元のデータ)を使って、フィルタリング・ソート・集計など。欠損値処理、重複行の削除、データの結合や分割も簡単に行える
  • データの集計と統計: グループ化、平均・合計・標準偏差などの統計値の計算、ピボットテーブルやクロス集計
  • データの変換: データ型の変換や値のマッピング、文字列操作
  • データの可視化: データフレームやシリーズから直接グラフを作成可能
  • 時系列データの処理: 日付や時刻を扱う機能も充実しており、リサンプリングや移動平均、時間のシフトなどが簡単にできる

ExcelやSQLで出来ることがPython上でほぼ出来るので重宝されているみたい。

試してみた

①データフレームの作成

import pandas as pd

# データの準備
data = {
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [25, 30, 22],
    '職業': ['エンジニア', 'デザイナー', '学生']
}

# データフレームの作成
df = pd.DataFrame(data)

# データフレームの表示
print(df)
   名前  年齢       職業
0  田中   25  エンジニア
1  鈴木   30  デザイナー
2  佐藤   22     学生

②CSVファイルの読み込み

pd.read_csv()で簡単に読み込める。

import pandas as pd

# CSVファイルの読み込み
df = pd.read_csv('data.csv')

# データフレームの表示
print(df)

CSVファイルのパスを指定してデータを読み込むことができます。また、headerindex_colなどの引数で詳細な設定も可能。

③列の選択

角括弧[]を使ってDataFrameから特定の列を選択できる。

# データの準備
data = {
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [25, 30, 22],
    '職業': ['エンジニア', 'デザイナー', '学生']
}

# データフレームの作成
df = pd.DataFrame(data)

# 名前の列を選択
name_column = df['名前']

# 複数列の選択
name_age_df = df[['名前', '年齢']]

print(name_column)
print(name_age_df)

単一の列を選択するとSeries型が返され、複数列を選択するとDataFrameが返される。

0    田中
1    鈴木
2    佐藤
   名前  年齢
0  田中   25
1  鈴木   30
2  佐藤   22

④行の選択(行ラベル、行番号)

locilocを使って、行ラベルや行番号に基づいて行を選択できる。

# 行ラベルを指定して選択(loc)
row_0 = df.loc[0]

# 行番号を指定して選択(iloc)
row_0_iloc = df.iloc[0]

print(row_0)
print(row_0_iloc)

locは行ラベルで、ilocは行番号(0から始まるインデックス)で選択。

名前       田中
年齢        25
職業    エンジニア

⑤データのフィルタリング(条件を指定してデータを抽出)

条件を指定してデータをフィルタリングすることができます。

# 年齢が25歳以上のデータを抽出
filtered_df = df[df['年齢'] >= 25]

print(filtered_df)

条件式を使って特定のデータを抽出する際、&|を使って複数条件を組み合わせることもできる。

   名前  年齢       職業
0  田中   25  エンジニア
1  鈴木   30  デザイナー

⑥新しい列の追加

# 新しい列「年齢カテゴリ」を追加
df['年齢カテゴリ'] = ['成人' if age >= 20 else '未成年' for age in df['年齢']]

print(df)

リスト内包表記を使った方法や、既存の列を使った計算結果を新しい列にすることがよくあるらしい。

   名前  年齢       職業 年齢カテゴリ
0  田中   25  エンジニア      成人
1  鈴木   30  デザイナー      成人
2  佐藤   22     学生      成人

⑦列の名前変更

rename()メソッドを使って、DataFrameの列名を変更できます。

# 列「年齢」を「Age」に変更
df.rename(columns={'年齢': 'Age'}, inplace=True)

print(df)

inplace=Trueにすると、元のデータフレームが直接変更される。

   名前  Age       職業 年齢カテゴリ
0  田中   25  エンジニア      成人
1  鈴木   30  デザイナー      成人
2  佐藤   22     学生      成人

⑧欠損値の確認と処理

isnull()dropna()fillna()などを使用し、欠損値の確認や処理を行うことができる。

data = {
    '名前': ['田中', None, '佐藤'],
    '年齢': [25, None, 22],
    '職業': [None, 'デザイナー', '学生']
}
df = pd.DataFrame(data)

# 欠損値の確認
print(df.isnull())

# 欠損値のある行を削除
df_cleaned = df.dropna()

# 欠損値を0で埋める
df_filled = df.fillna(0)

print(df_cleaned)
print(df_filled)

df.isnull()の結果:

     名前    Age     職業  年齢カテゴリ
0  False  False  False  False
1  False  False  False  False
2  False  False  False  False

df_cleaned(欠損値を持つ行を削除した結果):

   名前  年齢  職業
2  佐藤  22  学生

df_filled(欠損値を0で埋めた結果):

   名前  年齢      職業
0  田中  25       0
1   0   0  デザイナー
2  佐藤  22      学生

⑨データの並べ替え(ソート)

sort_values()メソッドを使って、特定の列に基づいてデータを並べ替える。

# 年齢で昇順にソート
sorted_df = df.sort_values('Age')

# 年齢で降順にソート
sorted_df_desc = df.sort_values('Age', ascending=False)

⑩データの保存(CSVファイルに書き出し)

DataFrameをCSVファイルとして保存する場合はto_csv()

# CSVファイルに保存
df.to_csv('output.csv', index=False)

index=Falseを指定すると、行番号がCSVに出力されないように設定できる。

← 新しい記事
このサイトをつくった理由
記事一覧にもどる