第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 を使用する。