pandasについて
pandas:データ解析をするためのpythonのライブラリ
→ データ解析の前処理に用いられる。
・データの入出力や前処理、簡単な演算などが可能
モジュールをインポートする際、略語を当てることが多いですが(numpyならnpなど)、pandasではpdとすることが多いようです。
pandasの3つのデータ型
・シリーズ(1行データ)
・データフレーム(2次元データ)
・パネル(3次元データ)
・シリーズについて
・シリーズ
>>>import pandas as pd
>>> series=pd.Series([1,2,3,4])
>>> print(series) #左の列に行数、右にシリーズ内のデータが出力される。
0 1
1 2
2 3
3 4
dtype: int64
・ラベルを指定するloc, 番号を指定するiloc(0から数える), その他ixなどを用いて操作する
>>> series=pd.Series([1,2,3,4], index=["A", "B", "C", "D"])
>>> series
A 1
B 2
C 3
D 4
dtype: int64
>>> series.iloc[1] #1番目を出力
2
>>> series.iloc[0] #0番目を出力
1
>>> series.loc["A"] #ラベル="A"を出力
1
>>> series.loc["C"] #ラベル="C"を出力
3
・データフレームについて
>>> df=pd.DataFrame({
... '名前':['太郎','恵子','誠'],
... '役割':['父','母','息子'],
... '年齢':[40,37,12]
... })
>>> print(df) #keyを設定し、そこに要素を紐づける
名前 役割 年齢
0 太郎 父 40
1 恵子 母 37
2 誠 息子 12
>>> print(df.dtypes) #型を出力
名前 object
役割 object
年齢 int64
dtype: object
>>> print(df.columns) #keyはなにかを出力
Index(['名前', '役割', '年齢'], dtype='object')
>>> data={
... '名前':['太郎','恵子','誠'],
... '役割':['父','母','息子'],
... '年齢':[40,37,12]
... }
>>> df=pd.DataFrame(data, colimns=['名前','役割','年齢']) #変数に入れて入力することも可能
>>> df
名前 役割 年齢
0 太郎 父 40
1 恵子 母 37
2 誠 息子 12
>>> df=pd.DataFrame(data, columns=['役割','名前','年齢']) #columnsで順番を指定
>>> df
役割 名前 年齢
0 父 太郎 40
1 母 恵子 37
2 息子 誠 12
>>> df.columns=['position','name','old'] #カラム名を変更
>>> df
position name old
0 父 太郎 40
1 母 恵子 37
2 息子 誠 12
>>> a = pd.Series(["娘","娘子",10], index=df.columns) #同じカラム名で作成
>>> df = df.append(a, ignore_index=True) #indexのフリ直しをignore_indexで
・パネル
データフレームをさらにまとめたもの(今回は割愛)
→ シリーズ<データフレーム<パネル のイメージです。
>>> df1=pd.DataFrame(np.arange(1,30)) #1から29までの列をデータフレームとして作成
>>> df1.head() #先頭から5件出力
0
0 1
1 2
2 3
3 4
4 5
>>> df1.tail() #末尾から5件出力
0
24 25
25 26
26 27
27 28
28 29
>>> df1.head().append(df1.tail(2)) #()の中には数字が渡せる。今回は先頭から5件、末尾から2件
0
0 1
1 2
2 3
3 4
4 5
27 28
28 29
欠損値処理(NaNの扱い方)
・dropna(除外、削除)
・fillna(置換、穴埋め)
・isnull(判定)
・nutnull(判定)
基本的にはすべての値に対してか、行・列に対してか、それぞれ個別が対象かなどそのターゲットを指定してあげる必要がある。
>>> data={
... '名前':['太郎','恵子',np.nan],
... '役割':['父',np.nan,'息子'],
... '年齢':[40,37,np.nan]
... }
>>> df=pd.DataFrame(data, columns=['名前','役割','年齢'])
>>> df #NaNを含んだDataFrame
名前 役割 年齢
0 太郎 父 40.0
1 恵子 NaN 37.0
2 NaN 息子 NaN
>>> print(df.dropna) #NaNを含んだカラムを全削除
<bound method DataFrame.dropna of 名前 役割 年齢
0 太郎 父 40.0
1 恵子 NaN 37.0
2 NaN 息子 NaN>
>>> print(df.dropna(subset=['年齢'])) #年齢カラムにNaNを含んだものを削除、この場合は2行目
名前 役割 年齢
0 太郎 父 40.0
1 恵子 NaN 37.0
>>> print(df.fillna('未確定')) #NaNを'未確定'で代わりに埋める
名前 役割 年齢
0 太郎 父 40
1 恵子 未確定 37
2 未確定 息子 未確定
>>> print(df.isnull()) #NaNはTrueに判定
名前 役割 年齢
0 False False False
1 False True False
2 True False True
>>> print(df.notnull()) #NaNはFalseに判定
名前 役割 年齢
0 True True True
1 True False True
2 False True False
データの入出力にはread文がそれぞれ存在する(csvファイルなど)
もちろんskiprowsなどで1行飛ばすなどの操作も可能
→ 上記に従えば、data=出力文、などでその後にデータフレームを作成すれば良い。
あとはソート文なども存在(intならば数字順、昇順・降順など)
この記事が気に入ったらサポートをしてみませんか?