axis=0で列(columnsもしくは縦),axis=1で行(indexもしくは横)...
→行列においては,行 rowが横,列 columnが縦のラインを指す.indexは索引の意,数学では指数の意.
csvファイルの読み込み(列名・行名あり)
以下のファイルを読み込み,操作を行う.
,1,2,3,4 A,10,5,8,3 B,5,20,5,15 C,8,2,16,4 D,6,6,12,18
csvには以上のファイルのパス(アドレス)が代入されているとする.
import pandas as pd data = pd.read_csv(csv, engine='python',header=0, index_col=0)
index_col=0
で列名が認識される.ちなみに,DataFrameとして作るなら以下のような感じ.
>>> data = pd.DataFrame([[10,5,8,3],[5,20,5,15],[8,2,16,4],[6,6,12,18]],index=['A','B','C','D'],columns=['1','2','3','4']) >>> data 1 2 3 4 A 10 5 8 3 B 5 20 5 15 C 8 2 16 4 D 6 6 12 18
転置
numpyと同じ.T
メソッドで転置したものが得られる.ただし,Seriesでやっても変更されない.
また,元のデータフレームは変更されていない.
>>> data.T A B C D 1 10 5 8 6 2 5 20 2 6 3 8 5 16 12 4 3 15 4 18 >>> data 1 2 3 4 A 10 5 8 3 B 5 20 5 15 C 8 2 16 4 D 6 6 12 18 >>> sr = pd.Series([0,1,2,3]) >>> sr 0 0 1 1 2 2 3 3 dtype: int64 >>> sr.T 0 0 1 1 2 2 3 3 dtype: int64
合計値を出したり...
sum
メソッドでaxis
で指定した方向に合計値を出した結果が返却される.
以下の例では列ごとに合計値を求めている.
>>> data_sum = data.sum(axis=0,numeric_only=True) >>> data_sum 1 29 2 33 3 41 4 40 dtype: int64 >>> type(data_sum) <class 'pandas.core.series.Series'> >>> data/data_sum*100 1 2 3 4 A 34.482759 15.151515 19.512195 7.5 B 17.241379 60.606061 12.195122 37.5 C 27.586207 6.060606 39.024390 10.0 D 20.689655 18.181818 29.268293 45.0
DataFrameでsum
を使った場合,返却されるのはSeriesであり,Seriesはcolumnsがない.なので,columnsを呼ぼうとするとAttributeError: 'Series' object has no attribute 'columns'
が吐き出される.
以上のように+
,-
,*
,/
といった算術演算子を適用させると,各要素に適用されたものが返却される.
また,以上の場合のDataFrameとSeriesでの演算は列ごとに計算される.このことを用いて,以上では各列ごとに百分率表示にしたDataFrameを作成した.
行の追加
>>> data.loc['合計'] = data.sum(axis=0,numeric_only=True) >>> data 1 2 3 4 A 10 5 8 3 B 5 20 5 15 C 8 2 16 4 D 6 6 12 18 合計 29 33 41 40 >>> data['合計'] Traceback (most recent call last): ・・・ KeyError: '合計' >>> data.loc['合計'] 1 29 2 33 3 41 4 40 Name: 合計, dtype: int64 >>> wariai = data/data.loc['合計']*100 >>> wariai.loc['合計数'] = data.loc['合計'] >>> wariai 1 2 3 4 A 34.482759 15.151515 19.512195 7.5 B 17.241379 60.606061 12.195122 37.5 C 27.586207 6.060606 39.024390 10.0 D 20.689655 18.181818 29.268293 45.0 合計 100.000000 100.000000 100.000000 100.0 合計数 29.000000 33.000000 41.000000 40.0
data['合計']
でKeyError: '合計'
が出る.なので,loc
で追加したものはloc
で呼び出す必要がある.