【初心者向け】Pythonでデータ分析を始めるならPandas!DataFrame・Series・CSV入出力の基本
Pandasは、Pythonでデータ分析やデータ処理を行う際に欠かせないライブラリです。
CSVやExcelなどの表形式データを高速かつ柔軟に処理でき、データの読み込み・整形・集計・分析・可視化まで幅広くカバーします。
この記事では、Pandas初心者がまず押さえるべきDataFrame・Series・CSV入出力・データアクセス・集計メソッドについて解説します。
記事内のコードはすべてコピペで実行可能です。
1. Pandasの概要
Pandasには2つの基本データ構造があります。
- DataFrame:行と列を持つ表形式データ(ExcelやSQLのテーブルに近い)
- Series:1次元のラベル付きデータ(1列分のデータ)
よく使うコードは、VSCodeのスニペット機能(python.json
)に登録しておくと効率的です。
2. DataFrameの作成
import pandas as pd
df = pd.DataFrame({
'Bob': ['I liked it.', 'It was awful.'],
'Sue': ['Pretty good.', 'Bland.']
}, index=['Product A', 'Product B'])
print(df)
出力:
Bob Sue
Product A I liked it. Pretty good.
Product B It was awful. Bland.
3. Seriesの作成
sales = pd.Series(
[30, 35, 40],
index=['2015 Sales', '2016 Sales', '2017 Sales'],
name='Product A'
)
print(sales)
出力:
2015 Sales 30
2016 Sales 35
2017 Sales 40
Name: Product A, dtype: int64
4. CSVファイルの入出力
読み込み:
df = pd.read_csv('./hogehoge.csv', index_col=0)
-
index_col=0
→ 最初の列をインデックスとして扱う
書き出し:
df.to_csv("hogehoge.csv")
5. データへのアクセス方法
列の取得:
df['Bob'] # 推奨
df.Bob # 列名がシンプルな場合のみ可
行・行+列の取得(loc):
df.loc['Product A'] # 行取得
df.loc['Product A', 'Bob'] # 行と列を同時に取得
df.loc[:, 'Bob'] # 全行のBob列取得
※ iloc
は位置ベースの取得方法ですが、ラベルベースの loc
の方が実務でよく使われます。
6. データ整形・集計メソッド
メソッド | 用途 |
---|---|
describe() |
要約統計量(平均、標準偏差、最大値など) |
mean() |
平均値 |
median() |
中央値 |
unique() |
ユニークな値 |
value_counts() |
各値の出現回数(Series専用) |
idxmax() |
最大値のインデックス |
map() |
Series要素に関数適用 |
apply() |
DataFrameやSeries全体に関数適用 |
例:
df['Bob'].unique()
df['Bob'].map(str.upper)
df.apply(lambda x: x.astype(str) + "!!")
7. GroupByによる集計
特定の列でデータをグループ化し、集計できます。
data = pd.DataFrame({
'Category': ['A', 'A', 'B', 'B'],
'Value': [10, 15, 10, 25]
})
# 平均を計算
grouped = data.groupby('Category')['Value'].mean()
print(grouped)
# 複数集計
agg_grouped = data.groupby('Category').agg(['mean', 'sum'])
print(agg_grouped)
8. データ型と変換
df['Bob'].dtype # データ型確認
df['Bob'] = df['Bob'].astype(str) # 型変換
9. 欠損値の処理
Pandasでは欠損値を NaN(Not a Number) で表します。
df.isnull() # 欠損値判定
df.fillna(0) # NaNを0に置換
df.replace('Bland', 'Average') # 特定値置換
10. データの結合
df1 = pd.DataFrame({'Key': [1, 2], 'A': ['A0', 'A1']})
df2 = pd.DataFrame({'Key': [1, 2], 'B': ['B0', 'B1']})
# 行方向に結合
pd.concat([df1, df2], axis=1)
# キーで結合
df1.join(df2.set_index('Key'), on='Key')
まとめ
- PandasはPythonでのデータ分析に必須
- DataFrameとSeriesを理解する
- CSVは
read_csv()
とto_csv()
で入出力 - データアクセスは
loc
が便利 -
describe()
やgroupby()
を使いこなせば集計が楽になる