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ならば数字順、昇順・降順など)


この記事が気に入ったらサポートをしてみませんか?