1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

松尾研のDeep Learning基礎講座演習コンテンツをやってみた(Chap.2-Pandas)

Last updated at Posted at 2018-05-30

Panda?
なんですかそれは……
説明をみるとどうやらRみたいな感じと考えればいいのかなーと思いつつ開始。

#準備
恒例のimport
Seriesは配列のようなオブジェクトなんですって……(?)

from pandas import Series,DataFrame
import pandas as pd

#Series

sample_pd_data=pd.Series([0,1,2,3,4,5,6,7,8,9])
print(sample_pd_data)

出力

0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int64

2列表示……?要素のデータ型も表示してくれるのね。

#データの値
print(sample_pd_data.value)
#index
print(sample_pd_data.index)

出力

データの値: [0 1 2 3 4 5 6 7 8 9]
インデックスの値: RangeIndex(start=0, stop=10, step=1)

seriesそのものとvalueとでは異なるものなんですね。

sample_pd_index_data=pd.Series([0,1,2,3,4,5,6,7,8,9],index=['a','b','c','d','e','f','g','h','i','j'])
print(sample_pd_index_data)

出力

a    0
b    1
c    2
d    3
e    4
f    5
g    6
h    7
i    8
j    9
dtype: int64

あーなるほど。
2列だと思ったの、左側はindexだったんですね。
こうするとindexも任意にできる……と。
indexが足りなかったりするとエラーになるから注意。

#DataFrame
各列で異なる型を持てるらしい。

attri_data1={'ID':['100','101','102','103','104'],
'citi':['Tokyo','Osaka','Kyoto','Hokkaido','Tokyo'],
'birth_year':[1990,1989,1992,1997,1982],
'name':['Hiroshi','Akiko','Yuki','Satoru','Steeve']}
attri_data_frame1=DataFrame(attri_data1)
print(attri_data_frame1)

出力

attri_data1={'ID':['100','101','102','103','104'],
'city':['Tokyo','Osaka','Kyoto','Hokkaido','Tokyo'],
'birth_year':[1990,1989,1992,1997,1982],
'name':['Hiroshi','Akiko','Yuki','Satoru','Steeve']}

#DataFrame
attri_data_frame1=DataFrame(attri_fata1)
print(attri_data_frame1)

よくわからないけどDataFrame()にcbindみを感じる……。 うーん、自信ないから言及すんのやめとくわ……。

Series同様、indexを更新してみましょう

attri_data_frame_index1=DataFrame(attri_data1,index=['a','b','c','d','e',])
print(attri_data_frame_index1)

出力

    ID  birth_year       city     name
a  100        1990      Tokyo  Hiroshi
b  101        1989      Osaka    Akiko
c  102        1992      Kyoto     Yuki
d  103        1997  Hokkaidao   Satoru
e  104        1982      Tokyo   Steeve

#転置

行列ではおなじみの操作が手軽にできるらしい

attri_data_frame1.T

できれいな表が出力できる。

#列指定
列指定にはデータの後にカラム名(?)をつける

#複数指定はリスト
attri_data_frame1[['ID','birth_year']]

出力


    ID birth_year
0	100	  1990
1	101	  1989
2	102	  1992
3	103	  1997
4	104	  1982

条件指定も

attri_data_frame1[attri_data_frame1['city']=='Tokyo']
#複数の条件指定(.isin())
attri_data_frame1[attri_data_frame1['city'].isin(['Tokyo','Osaka'])]
やってみた ``` attri_data_frame1[attri_data_frame1['birth_year']<=1990] ``` 出力 ``` ID birth_year city name 0 100 1990 Tokyo Hiroshi 1 101 1989 Osaka Akiko 4 104 1982 Tokyo Steeve ```

#削除

#.drop([],axis=)で削除
#axis=1で列削除
attri_data_frame1.drop(['birth_year'],axis=1)

#axis=0で行削除
attri_data_frame1.drop([0],axis=0)

#結合&集計

#とりあえず2個目のdataframeは作ったとする
#pd.merge()で結合 
pd.merge(attri_data_frame1,attri_data_frame2)

#groupby(A)[B]でAを軸にBを集計
attri_data_frame2.groupby("sex")["math"].mean

mean()の部分を変えれば種々の基本統計量も出せる

attri_data_frame2.groupby("sex")["math"].min()
attri_data_frame2.groupby("sex")["math"].max()
attri_data_frame2.groupby("sex")["math"].median()

#ソート

#.sort_index()でindexによる昇順ソート
#.sort_values()で値による昇順ソート

(ascending=False)で降順ソートだ!!

#その他

#.isin([])で存在確認
True or False で返事

#dataframe.(列名)=np.nan
列をnullにしちゃう

#.isnull()でその判別したり
こっちもTrue or False で返事

#.isnull().sum()でnullの数を数える……
 …………なぜ?

#練習問題

問題1 ``` from pandas import Series,DataFrame import pandas as pd attri_data1 = {'ID':['1','2','3','4','5'] ,'sex':['F','F','M','M','F'] ,'Money':[1000,2000,500,300,700] ,'name':['Saito','Horie','Kondo','Kawada','Matsubara']} attri_data_frame1 = DataFrame(attri_data1) attri_data_frame1[attri_data_frame1['Money']>=500] ```
問題2 ``` ※meanに()を忘れない attri_data_frame1.groupby('sex')['Money'].mean() ```
問題3 ``` attri_data2 = {'ID':['3','4','7'] ,'Math':[60,30,40] ,'English':[80,20,30]} attri_data_frame2 = DataFrame(attri_data2) pd.merge(attri_data_frame1,attri_data_frame2,on='ID',how='outer') on=''で列名指定 how=''で結合の仕方を指定します how:2つのdataframeについては inner:両方に存在するデータのみ残す left:1←2,1のデータはみんな残る right:1→2,2のデータはみんな残る outer:1+2,両方みんな残す。たぶんindexで並ぶ ```

これ単体でつかうものではないでしょうから変なこといいますけど、これだけだとあんまりどう使うかわかんないよね。でもソートとか条件指定とかgroupbyとかけっこうイイカンジだよね。

あとSeriesはexcelの縦列みたいなものだと思っとこう。

一応、ちょこちょこ変えてるんですけど、やっぱ怖みなので今後は徐々に写経は減らします……。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?