pandasとは、データ分析・解析用のライブラリ
pandasの特徴:numpyでやったことを見やすくわかりやすく表示できる
グラフ、表
numpyにおけるアレイみたいなもの
1次元のデータ
import numpy as np #numpyとpandasをインポート
import pandas as pd
S1 = pd.Series(np.arange(4)) #Seriesを生成 4要素のアレイを作る
S1
out:0 0 #1列目がインデックス 2列目が値
1 1
2 2
3 3
dtype: int32
S1.index #インデックスを調べる
out:RangeIndex(start=0, stop=4, step=1)
S1.values #値を調べる
out:array([0, 1, 2, 3])
S1[0] #インデックス0の値を調べる
out:0
S1? #こうするとタイプが見れる Seriesになっていることを確認できる
Type: Series
#インデックスにキーワードを指定してSeriesを生成する
S2 = pd.Series([1,2,3,4], index = ["a","b","c","d"])
S2
out:a 1
b 2
c 3
d 4
dtype: int64
S2["a"] #値にアクセスするにはキーワードを指定する
out:1
#Seriesをリストに変換する(キーワードは失われる)
list(S2)
out:[1, 2, 3, 4]
#ディクショナリをSeriesに変換する
pd.Series(num_dict)
out:a 1
b 2
c 3
dtype: int64
#Seriesに要素を追加する方法
S3 = pd.Series([]) #空のSeriesを作って
S3["a"] = 1 #キーワードと値を指定
S3
out: a 1
dtype: int64
Seriesは1次元のデータ
DataFrameはスプレッドシートのような2次元のデータを扱う
import pandas as pd #pandasと
import numpy as np #numpyをインポート
df1 = pd.DataFrame(np.arange(9).reshape(3,3)) #PandasのDataFrameをnpのarangeで作る
df1 #3×3にReshapeする
#このようにスプレッドシート風に出力される
#インデックスを渡さないとこのように数字になる
#行番号がインデックス、列番号がカラムズ
#インデックスを指定する方法
df2 = pd.DataFrame(np.arange(9).reshape(3,3), index=["a","b","c"], columns=["X","Y","Z"])
df2
#このようにインデックスとカラムズを指定できる
#特定の列を取り出す
df2["X"]
#空のDataFrameを作成して、後から要素を追加する方法
df3.ix["a","A"] = 1 #エラーになる 最近はixは使わず、ilocを使うそうです。
#解説はまたの機会に
import numpy as np #numpyと
import pandas as pd #pandasをインポート
#Excelファイルをインポート
df_p = pd.read_excel("./Lecture_Python\physical_measurement.xlsx")
#カレントディレクトリ配下がよい
df_p.head() #head関数を使うと最初の5行だけ表示される
#正しく読み込まれていることを確認
#データをファイルを書き出す
#CSVは .to_csv
df_p.to_csv("./Lecture_Python\sample.csv", sep=",") #セパレータを,に指定
#Excelは .to_excel
df_p.to_excel("./Lecture_Python\sample.xlsx")
import numpy as np #numpyと
import pandas as pd #pandasをインポート
%matplotlib inline #グラフ描画をNotebook内でしてくれるおまじない
#データフレームを作ってみる
df1 = pd.DataFrame(np.arange(9).reshape(3,3), index = ["a","b","c"], columns = ["A","B","C"])
df1
#値を取り出す
df1.values
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
#インデックスを取り出す
df1.index
Index(['a', 'b', 'c'], dtype='object')
#カラムズを取り出す
df1.columns
Index(['A', 'B', 'C'], dtype='object')
#カラムズを取り出す
df1.columns[0]
'A'
#Shapeを確認する
df1.shape
(3, 3)
df2 = pd.read_excel("./physical_measurement.xlsx")
df2 #読み込まれているか確認
df2.head(3) #最初の3行だけ出力される
df2.tail(3) #最後の3行だけ出力される
#身長だけを取り出す
df2["height"]
#平均値を出す
df2["height"].mean()
159.01231356018485
#身長170㎝を超えているデータだけを抽出する
df2[df2["height"]>170]
#女性だけのDataFrameを作る
df_f = df2[df2["sex"] == "female"]
#身長のヒストグラムをビンズを15個で描く
df_f[df_F["height"].hist(bins=15)
import pandas as pd #パンダスとナムパイをインポート
import numpy as np
df1 = pd.DataFrame(np.arange(16).reshape(4,4)) #16コマのarangeを4×4にリシェイプ
df1
#何も指定しないと数字のインデックスとカラムズになる
#これをリネームする
df1.rename(index={0:"A",1:"B",2:"C",3:"D"}, columns={0:"weight",1:"height",2:"grade",3:"sex"})
#この状態では保存されていないので、df2など新しいDataFrameに格納する
df2 = df1.rename(index={0:"A",1:"B",2:"C",3:"D"},
columns={0:"weight",1:"height",2:"grade",3:"sex"})
#カラムズをリネームする
df2.reindex(columns=["height","weight","sex","grade"])
#こちらも保存するために別のDataFrameに格納する
#カラムズ名で指定する方法
df2["height"]
#番地で指定する方法
df2.iloc[:,1] #すべての行「:」と1列目で指定
#同じ結果が得られる
#numpyとpandasをインポート
import numpy as np
import pandas as pd
#Excelファイルを読込んでデータフレームに入れる
df = pd.read.excel("physical_measurement2.xlsx",index_col=0)
#その際、index_col=0 という引数を入れることでインデックス列がつかず最初のカラムがインデックスとなる。特定のカラムをインデックスにしたければその列を指定する。
df .heas(10) #10行 表示する
#インデックスのソートを行う
df .sort_index()
#df2として保存
df2 = df .sort_index()
#NaN(Not a number)を削除
df2.dropna() #Na値を削除
#NaN(Not a number)を特定の値に置換
df2.fillna(value=-1.0) #NaN値は一律 -1.0に置換
#NaN値を直前の値に置換
df2.fillna(method="ffill") #直前の値が適用される
#NaN値を平均値に置換する
df3 = df2.fillna(value=df2.mean())
#df3として保存
#重複値を削除する
df3.drop_dupulicates() #インデックスが重複するレコードを削除
#文字列のsexを分析しやすく数値に置換する
#sex2というカラムを作り、そこにラムダ式でmaleだったら1、そうでなければ-1を代入する
df4["sex2"] = df4["sex"].apply (lambda x :np.where(x == "male" ,1 ,-1))
df4
#sexのカラムが不要になったので削除する
dell df4["sex"]
df4