AI E資格

ラビットチャレンジでE資格に挑戦 52日目

今日からPandas!
早く終わらして、スタートテストを超えたい。

■AIを学ぶ為の本格Python講座
PY16_Pandas_データの作成

 

今日学んだこと

Pandas

>>> import numpy as np
>>> import pandas as pd

2つの型がある。

Series

1次元のデータ。(横1列もしくは縦一列のデータ)

>>> data=pd.Series([0.25,0.5,0.75,1.0])
>>> data
0 0.25
1 0.50
2 0.75
3 1.00
dtype: float64
>>>

numpyの配列を取得
>>> data.values
array([0.25, 0.5 , 0.75, 1. ])
>>>

numpyと同じように扱える。
>>> data[1]
0.5
>>> data[2]
0.75

data[1]からdata[1]まで(2は含まれない)
>>> data[1:2]
1 0.5
dtype: float64
>>>

data[1]からdata[2]まで(3は含まれない)
>>> data[1:3]
1 0.50
2 0.75
dtype: float64

インデックス番号を取得
0から3まで1ずつ増加、つまり、0,1,2,3(4は含まれない)
>>> data.index
RangeIndex(start=0, stop=4, step=1)
>>>

インデックスは、数字以外も指定できる。
>>> data=pd.Series([0.25,0.5,0.75,1.0],index=['a','b','c','d'])
>>> data
a 0.25
b 0.50
c 0.75
d 1.00
dtype: float64
>>>
>>> data.index
Index(['a', 'b', 'c', 'd'], dtype='object')
>>>

インデックスは数字でも指定できるし、オブジェクトでも指定できる。
辞書形式のように扱える。
>>> data[0]
0.25
>>> data['a']
0.25
>>>

最初から辞書のように扱える

>>> name=pd.Series({
... 'futarou':40,
... 'satoshi':20,
... 'mitsuyo':50,
... 'youko':55,
... })
>>>
>>> name
futarou 40
satoshi 20
mitsuyo 50
youko 55
dtype: int64
>>>
>>> name['satoshi']
20
>>>

satoshiからyoukoまでを出力
>>> name['satoshi':'youko']
satoshi 20
mitsuyo 50
youko 55
dtype: int64
>>>

PandasのSeriesの作成方法3つ まとめ
配列を指定する。インデックスは0から連番が自動に振られる。

>>> data=pd.Series([0.25,0.5,0.75,1.0])
>>> data
0 0.25
1 0.50
2 0.75
3 1.00
dtype: float64
>>>

インデックスを指定する。

>>> pd.Series([1,2,3],index=[100,200,300])
100 1
200 2
300 3
dtype: int64
>>>

数字を1つだけ指定すると、その数字で埋める

>>> pd.Series(99,index=[100,200,300])
100 99
200 99
300 99
dtype: int64
>>>

辞書で表現

>>> pd.Series({'aaa':99,'bbb':199,'ccc':299})
aaa 99
bbb 199
ccc 299
dtype: int64
>>>

DataFrame

nenrei=pd.Series({
'futarou':40,
'satoshi':20,
'mitsuyo':50,
'youko':55,
})

>>> nenrei
futarou 40
satoshi 20
mitsuyo 50
youko 55
dtype: int64
>>>

shinchou=pd.Series({
'futarou':190,
'satoshi':167,
'mitsuyo':155,
'youko':148,
})

>>> shinchou
futarou 190
satoshi 167
mitsuyo 155
youko 148
dtype: int64
>>>

同じインデックスはまとめてくれて、表で表現できる。

>>> status=pd.DataFrame({
... 'nenrei':nenrei,
... 'shinchou':shinchou
... })
>>>
>>> status
nenrei shinchou
futarou 40 190
satoshi 20 167
mitsuyo 50 155
youko 55 148
>>>

2次元でもインデックスを持つ(縦と横のインデックスを持つイメージ)

>>> status.index
Index(['futarou', 'satoshi', 'mitsuyo', 'youko'], dtype='object')
>>>
>>> status.columns
Index(['nenrei', 'shinchou'], dtype='object')
>>>

1列を取り出す(DataFrameからSeriesとして取得)

>>> status['nenrei']
futarou 40
satoshi 20
mitsuyo 50
youko 55
Name: nenrei, dtype: int64
>>>

一気に表形式を作る

>>> data=pd.DataFrame([
... [1.1,1.3,1.8,1.6,1.5],
... [2.3,2.1,2.6,2.8,2.7],
... ])
>>>
>>> data
0 1 2 3 4
0 1.1 1.3 1.8 1.6 1.5
1 2.3 2.1 2.6 2.8 2.7
>>>

行じゃなくて、列が表示される。(Numpyと反対。。。なぜ?)

>>> data[0]
0 1.1
1 2.3
Name: 0, dtype: float64
>>>

要素を取り出す場合は、列、行で指定する。

>>> data[0][1]
2.3
>>>

DataFrameの作成方法

CSVファイルを読み込む

>>> pd.read_csv('test.csv')
a b c d e
0 1 2 3 4 5
1 1 2 3 4 5
2 1 2 3 4 5
3 1 2 3 4 5
4 1 2 3 4 5
>>>

SeriesオブジェクトからDataFrameで

>>>
>>> test10=pd.Series({
... 'a':999,
... 'b':1999,
... 'c':2999,
... 'd':3999,
... 'e':4999
... })
>>>
>>>
>>> pd.DataFrame(test10,columns=['aaa'])
aaa
a 999
b 1999
c 2999
d 3999
e 4999
>>>

辞書から。

>>> pd.DataFrame([
... {'a':1,'b':2},
... {'a':3,'b':4},
... {'a':5,'b':6},
... ])
a b
0 1 2
1 3 4
2 5 6

ないもの(欠損値)があるときは、NaN で埋められる。

>>> pd.DataFrame([
... {'a':1,'b':2,'c':999},
... {'a':3,'b':4},
... {'a':5,'b':6},
... ])
a b c
0 1 2 999.0
1 3 4 NaN
2 5 6 NaN
>>>

Seriesの辞書から

nenrei=pd.Series({
'futarou':40,
'satoshi':20,
'mitsuyo':50,
'youko':55,
})

shinchou=pd.Series({
'futarou':190,
'satoshi':167,
'mitsuyo':155,
'youko':148,
})

同じインデックスはまとめてくれて、表で表現できる。

>>> status=pd.DataFrame({
... 'nenrei':nenrei,
... 'shinchou':shinchou
... })

>>> status
nenrei shinchou
futarou 40 190
satoshi 20 167
mitsuyo 50 155
youko 55 148
>>>

numpyの配列から

>>> test999=np.random.rand(3,3)
>>>
>>> test999
array([[0.16496641, 0.66380839, 0.92084195],
[0.26379367, 0.22090282, 0.22242504],
[0.3155583 , 0.87315918, 0.30191225]])
>>>

列(columns)、行(index)を指定してあげる。

>>> pd.DataFrame(
... test999,
... columns=['aaa','bbb','ccc'],,
... index=['a','b','c']
... )
aaa bbb ccc
a 0.164966 0.663808 0.920842
b 0.263794 0.220903 0.222425
c 0.315558 0.873159 0.301912
>>>

 

 

勉強時間

今日: 0.5時間

総勉強時間: 33.0時間

 

お得キャンペーンの紹介

ラビットチャレンジの
Amazonギフト券「5,000円」プレゼントキャンペーンのお知らせ

申込時に、以下コードを使えば、入会金が5000円引かれるようです。
また、紹介した僕にも5000円のAmazonギフト券が送られるようです。
お得なので、よかったら申込時お使いください。

紹介コード:friend0019697

※本キャンペーンの期間は、 2021年9月15日~10月31日 です。

「お友達紹介キャンペーン」特設ページ:
https://ai99

-AI, E資格