コンテンツにスキップ

第2章 データを読み込み

1 ファイルの読み込み

題材として、学校の成績を分析します。以下のようなデータです。

"名前","クラス","性別","国語","算数","理科","社会"
"佐藤","A","男","80","60","55","75"
"鈴木","A","男","70","63","30","80"
"高橋","A","男","60","71","92","65"



このようなカンマで区切られたデータ(csvファイル)を読み込みます。 seiseki.ipynb に以下を記述し実行します。

import pandas as pd

df = pd.read_csv("seiseki.csv")
df

pandasは二次元の表を表すライブラリです。 列のタイトルであるcolumns、行のタイトルであるindexが付いています。

インデックスを特定の列に変更することができます。

df = pd.read_csv("seiseki.csv", index_col="名前")
df

2 さまざまな表示

読み込んだデータがどのようなデータなのか、概要を見てみましょう。

データが多い場合、最初のデータ5件のみを表示すると見やすくなります。head() で可能です。

df.head()

※最後の5件は tail() で見れます。

何行、何列あるかは shape で分かります。

df.shape

また、列名を見るには以下のようにします。

df.columns

各列のデータ型を見てみます。

df.dtypes

結果は以下のようになります。

クラス    object
性別     object
国語      int64
算数      int64
理科      int64
社会      int64

文字列はobject型、整数はint64型です。

3 抽出

問題を解決する場合にデータ全体を使用するのでは無く、データの一部のみが必要になることはよくあります。

国語のみの列を抜き出してみましょう。

df["国語"]

一列の場合、データ型はDataFrame型からSeries型に変わります。Series型は列名が無く、インデックスのみです。

国語と算数の列を抜き出してみましょう。リストを添え字で渡すことに注意してください。

df[["国語","算数"]]

ある列にどのようなデータがあるか、重複を消去して見るには unique() を使います。

df["クラス"].unique()

あるデータがどのくらいあるか、出現回数は value_counts() で分かります。

df["クラス"].value_counts()

行を抜き出してみましょう。以下でTrue、Falseの列が作られます。

df['クラス']=='A'

これを添え字に入れてやることで抜き出します。

df[df['クラス']=='A']

複数条件がある場合、条件を()で囲んで、&でつなぎます。

df[(df['クラス']=='A') & (df['性別']=='男')]

問題

算数と理科が共に80点以上の人を抜き出そう。

複数行を抜き出すときにはスライスも指定できます。

df[5:10]  # 5行目から10行目の手前まで

1行を抜き出す場合、locでインデックスを指定します。

df.loc["山本"]

順番で指定したい場合、ilocで指定します。

df.iloc[5]

要素を取り出すには、さらに列名を加えます。

df.iloc[5]['国語']

4 変更

例えば、「合計点」のような新たな列を作るには、以下のようにします。

df["合計点"]=df["国語"]+df["算数"]+df["理科"]+df["社会"]
df

また、いらない列は削除することも出来ます。合計点を削除するには以下のようにします。

df.drop('合計点', axis=1)

axisは行か列を表す引数でさまざまなメソッドで使用します。 0が行、1が列です。

複数列を削除するにはリストで指定します。

df.drop(['国語','理科'], axis=1)

なお、このようにしてもdf自体は列が削除されていません。dropは削除された結果を返しているだけですので、それを後で使いたいなら変数に入れる必要があります。

df = df.drop(['合計点'], axis=1)
df

行を削除するにはインデックスを指定します(axis=0は省略できます)。

df.drop("佐藤")

5 日付の扱い

日付の扱いを学ぶために、別のファイルを開きます。ある会の参加者を示すデータ kdg.csv を開きます。kdg.ipynb で以下を記述します。

import pandas as pd

df = pd.read_csv("kdg.csv", index_col = '回')
df

df.dtypes でデータ型を確認します。すると、日付の列が、object型(文字列)になっていることがわかります。このままでは日付のメソッドが使えませんので、datetime型に変更します。

df["日付"] = pd.to_datetime(df['日付'])
df

df.dtypes を行うと、datetime型に変わっていることが分かります。

datetime型になると、df["日付"].dt の後にdatetimeのメソッドが使えるようになります。例えば、年を抜き出すには以下のようにします。

df["日付"].dt.year

問題

10月のデータのみを抜き出そう。月を求めるには month を使用する。