import pandas as pd
# Seriesを作成する
li = [1,2,3,4,5]
ser = pd.Series(li)
ser
# DataFrameを作成する
li = [['aaa', 1, True],
['bbb', 2, False],
['ccc', 3, False]]
df = pd.DataFrame(li)
df
# 一つの列に文字列が混在すると演算できなくなるので注意
# DataFrameを観察する
import numpy as np
import pandas as pd
df =pd.DataFrame(np.arange(100).reshape(25,4))
df.head(3) #データの頭の3行を表示する
df.tail(3) #データの尾の3行を表示する
df.shape #(25, 4) 25行 x 4列
# DataFrameのindex とcolumns を定義する
df = pd.DataFrame(np.arange(6).reshape(3,2))
df.index = ['001', '002', '003']
df.columns =['Value_1', 'Value_2']
df
# index指定
df[0:2]
# columns指定
df['Value_1']
# columns指定 複数の場合はリストで渡す
df[['Value_1','Value_2']]
# ディクショナリから DataFrameを作成する
dic ={'aaa':[1,2,3,4], 'bbb':[5,6,7,8], 'c':[9,10,11,12]}
df = pd.DataFrame(dic)
df
# ロケーション指定 loc , iloc
import numpy as np
import pandas as pd
# 24行x 4列のDataFrameを生成
df = pd.DataFrame(np.arange(5*4).reshape(5,4))
df.index = ['row1', 'row2', 'row3', 'row4', 'row5']
df.columns =['A', 'B', 'C', 'D', ]
df
df.loc[:,:] # 必ず index columnsの両方を指定するので曖昧さがない
df.loc[:,'B']
df.loc['row3','B']
df.loc[['row1', 'row2'], 'B']
df.iloc[0,0] # 0
df.iloc[2:4, :]
# データの読み込み
df_csv = pd.read_csv('data/sample_data.csv', encoding='utf-8', index_col=0, parse_dates=True)
df_excel = pd.read_excel('data/sample_data.xlsx', encoding='utf-8', index_col=0, parse_dates=True)
df = df_csv
# htmlのtableから表を抜き出す
# url = ""
# tables = pd.read_html(url)
# df_html = tables[0]
# データの書き込み
df.to_csv('data/write_data.csv') # csvデータ
df.to_excel('data/write_data.xlsx') # エクセルデータ
df.to_pickle('data/write_data.pickle') # ピクルデータ
# 保存したデータの読み込み
df_csv = pd.read_csv('data/sample_data.csv', encoding='utf-8')
df_pickle = pd.read_pickle('data/write_data.pickle')
df_pickle
# 条件抽出
df_bool = df_pickle['column_2'] >= 5
df_bool
df_selected = df_pickle[df_pickle['column_2'] > 5]
df_selected
# 条件抽出 SQLのようにqueryメソドを使用する
df_pickle.query('column_2 >= 5 and column_2 <= 9')
# 各列の型を確認する df.dtypes
df_pickle.dtypes
# 型を変更する
df = df_pickle # 以後説明しやすいように名前を変更しておきます。
df.loc[:,'date'] = df.loc[:,'column_1']
df['date'] = df['date'].apply(pd.to_datetime)
df
# int から floatに型を変更する
df['float'] = df['column_1'].astype(np.float32)
df
# 並べ替え .sort()
df.sort_values(by = 'column_2', ascending=True) # 昇順
df.sort_values(by = 'column_2', ascending=False) # 降順
# 関数を使って条件分岐する
def judge(value):
if value >= 7:
return 'good'
if value >=4:
return 'nomal'
else:
return 'bad'
df['judged'] = df['column_2'].apply(judge)
df
# One-Hot エンコーディングをする
df_moved = pd.get_dummies(df['judged'], prefix='J')
df_moved
# pickle保存しておく
pd.to_pickle(df_moved, 'data/df_moved.pickle')
# 時系列データの作成
dates = pd.date_range(start='2019-01-01', end='2019-1-30')
np.random.seed(0)
df =pd.DataFrame(np.random.randint(1,31,30), index=dates, columns=['rand_value'])
df.head()
# 時系列データの作成2
dates = pd.date_range(start='2019-01-01', periods=365)
np.random.seed(1)
df = pd.DataFrame(np.random.randint(1, 31, 365), index=dates, columns=['rand_value'])
df.head()
# 月平均を算出する .grooupby(pd.Grouper())
df.groupby(pd.Grouper(freq='M')).mean().head()
# 月平均を算出する2 .resample()
df['rand_value'].resample('M').mean().head()
# Serieseで返ってくる
# 年間の土曜日の日付データを作成する
pd.date_range(start='2019-01-01', end='2019-12-31', freq='W-SAT')
# 土曜日までの1週間単位でデータをまとめる
df_year = pd.DataFrame(df.groupby(pd.Grouper(freq='W-SAT')).sum(), columns=['rand_value'])
df_year.head()
#欠損値の処理
df_nan = pd.read_pickle('data/write_data.pickle')
#欠損値の行を削除する
df_droped = df_nan.dropna()
df_droped
#欠損値に0を代入して埋める
df_fillna = df_nan.fillna(0)
df_fillna
#欠損値を1つ手前の値で補完する
df_fill = df_nan.fillna(method='ffill')
df_fill
# データの連結
df = pd.read_pickle('data/df_sample.pickle')
df_moved = pd.read_pickle('data/df_moved.pickle')
# 列方向の連結
df_merged = pd.concat([df, df_moved], axis=1)
df_merged.head()
# 行方向に連結する
df_1 = df.loc[1:2,:]
df_2 = df.loc[9:10,:]
df = pd.concat([df_1, df_2], axis=0, sort=True)
df
# 基本的な統計量を算出する
np.random.seed(2)
df = pd.DataFrame(np.random.randint(0,11,100), columns=['value'])
print(df.loc[:,'value'].max(),
df.loc[:,'value'].min(),
df.loc[:,'value'].mode(), #最頻値
df.loc[:,'value'].mean(),
df.loc[:,'value'].median(),
df.loc[:,'value'].std(ddof=0), # 母集団の標準偏差
df.loc[:,'value'].std(ddof=1), # サンプルの標準偏差
)
#カウント
df[df.loc[:,'value'] == 5].count()
# 要約された統計量を算出する
df.describe()
# 相関係数
data = np.random.randn(300).reshape(100,3)
df = pd.DataFrame(data)
df.head()
df.corr()
from pandas.plotting import scatter_matrix
%matplotlib inline
_ = scatter_matrix(df)
# pandas.DataFrame から numpy.arrayへの変換
df[0].values
# ---- end of sript ----