pandasとは
pandasは、表形式のデータ(データフレーム)を効率的に操作するためのライブラリです。データ分析・前処理に広く使われています。
python
import pandas as pd # pdという別名が慣習import numpy as nppd.__version__Series
Seriesは、ラベル付きの1次元データです。
python
import pandas as pd# リストからSeriesを作成s = pd.Series([10, 20, 30, 40, 50])print(s)# 0 10# 1 20# 2 30# 3 40# 4 50# インデックスを指定s2 = pd.Series([10, 20, 30], index=["a", "b", "c"])s2["a"] # 10s2["b"] # 20DataFrame
DataFrameは、2次元のラベル付きデータです。表計算ソフトのシートのようなイメージです。
python
import pandas as pd# 辞書からDataFrameを作成data = { "名前": ["田中", "鈴木", "佐藤", "山田"], "年齢": [25, 30, 28, 22], "点数": [85, 92, 78, 88], "合格": [True, True, False, True],}df = pd.DataFrame(data)print(df)# 名前 年齢 点数 合格# 0 田中 25 85 True# 1 鈴木 30 92 True# 2 佐藤 28 78 False# 3 山田 22 88 TrueDataFrameの基本情報
python
df.shape # (4, 4)(行数、列数)df.dtypes # 各列のデータ型df.info() # 概要情報df.describe() # 数値列の統計情報データの選択
python
# 列の選択df["名前"] # 1列をSeriesとしてdf[["名前", "点数"]] # 複数列をDataFrameとして# 行の選択df.iloc[0] # インデックス番号で行を選択df.iloc[0:2] # スライスで複数行df.loc[0] # ラベルで行を選択df.loc[0:1] # ラベルでスライス# 条件でフィルタリングdf[df["点数"] >= 85] # 点数85以上df[df["合格"] == True] # 合格者のみdf[(df["年齢"] >= 25) & (df["点数"] >= 85)]データの操作
python
# 列の追加df["評価"] = ["B", "A", "C", "B"]# 列の削除df.drop("評価", axis=1, inplace=True)# 列の演算df["点数"] = df["点数"] * 1.1 # 全体10%アップ# 並び替えdf.sort_values("点数", ascending=False) # 点数の降順# 欠損値の処理df.isnull().sum() # 欠損値の数df.fillna(0) # 欠損値を0で埋めるdf.dropna() # 欠損値のある行を削除ファイルの読み込み・保存
python
# CSVファイルの読み込みdf = pd.read_csv("data.csv", encoding="utf-8")df = pd.read_csv("data.csv", encoding="utf-8", index_col=0)# Excelファイルdf = pd.read_excel("data.xlsx", sheet_name=0)# CSVへの保存df.to_csv("output.csv", encoding="utf-8", index=False)# JSONdf = pd.read_json("data.json")df.to_json("output.json", force_ascii=False)グループ化と集計
python
import pandas as pddata = { "部門": ["営業", "技術", "営業", "技術", "人事"], "氏名": ["田中", "鈴木", "佐藤", "山田", "中村"], "給与": [400, 500, 420, 480, 380]}df = pd.DataFrame(data)# 部門ごとの平均給与df.groupby("部門")["給与"].mean()# 部門ごとの人数と平均・合計df.groupby("部門").agg({"給与": ["count", "mean", "sum"]})練習: DataFrameの操作
以下のデータからDataFrameを作成し、
- 年齢が25歳以上の行を抽出
- 点数の平均を計算 してください。