gijyutsu-keisan.com

3.6.Pandas配列の変形

サンプルデータフレームとして次のものを用います。
>>> A = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['x','y','z'])
>>> A
x  y  z
a  1  2  3
b  4  5  6
c  7  8  9

3.6.1.行追加/削除

(1)リスト/Numpy配列で行追加

  • A.loc['行名']=Data (行名はAに含まれないindex名を指定)
Dataはスカラー、一次元のリスト/Numpy配列を指定します。 リスト/Numpy配列の場合は、要素数がDataFrameの列数と一致しなければなりません。
#4行目(d行)を追加します。
#スカラーで指定
>>> A.loc['d']=0
>>> A
x  y  z
a  1  2  3
b  4  5  6
c  7  8  9
d  0  0  0

#リストで指定
>>> A.loc['d']=[10,11,12]
>>> A
x   y   z
a   1   2   3
b   4   5   6
c   7   8   9
d  10  11  12

>>> bl=[10,11,12]
>>> A.loc['d']=bl
>>> A
x   y   z
a   1   2   3
b   4   5   6
c   7   8   9
d  10  11  12

#Numpy配列で指定
>>> bn=np.array([10,11,12])
>>> A.loc['d']=bn
>>> A
x   y   z
a   1   2   3
b   4   5   6
c   7   8   9
d  10  11  12

節はじめに戻る


(2)DataFrameで行追加(結合)

  • A.append(DataFrame)
列数を変えずにデータを追加する場合は、追加するcolumnsの名前をAのcolumnsと合わせます。 Aを書き換えたい場合は“A=A.append()”とします。
#4、5行目(d、e行)を追加します。
>>> bp=pd.DataFrame([[10,11,12],[13,14,15]],index=['d','e'],columns=['x','y','z'])
>>> bp
x   y   z
d  10  11  12
e  13  14  15
>>> A=A.append(bp)
>>> A
x   y   z
a   1   2   3
b   4   5   6
c   7   8   9
d  10  11  12
e  13  14  15

#追加するDataFrameの列に欠損がある場合は'NaN'が入ります。
>>> bp=pd.DataFrame([[10,12],[13,15]],index=['d','e'],columns=['x','z'])
>>> bp
x   z
d  10  12
e  13  15
>>> A.append(bp)
x    y   z
a   1  2.0   3
b   4  5.0   6
c   7  8.0   9
d  10  NaN  12
e  13  NaN  15

#データを指定せず、indexとcolumnsだけ指定する場合、データには'NaN'が入ります。
>>> bp=pd.DataFrame(index=['d','e'],columns=['x','y','z'])
>>> bp
x    y    z
d  NaN  NaN  NaN
e  NaN  NaN  NaN
>>> A=A.append(bp)
>>> A
x    y    z
a  1.0  2.0  3.0
b  4.0  5.0  6.0
c  7.0  8.0  9.0
d  NaN  NaN  NaN
e  NaN  NaN  NaN

#追加するDataFrameのindex、columnsを指定しなかった場合
>>> bp=pd.DataFrame([[10,12],[13,15]])
>>> A.append(bp)
x    y     z     0     1
a   1.0  2.0   3.0   NaN   NaN
b   4.0  5.0   6.0   NaN   NaN
c   7.0  8.0   9.0   NaN   NaN
d  10.0  NaN  12.0   NaN   NaN
e  13.0  NaN  15.0   NaN   NaN
0   NaN  NaN   NaN  10.0  12.0
1   NaN  NaN   NaN  13.0  15.0

節はじめに戻る


(3)行削除

  • A.drop('行名')
行名で指定した一行分を削除します(行番号での指定はできません)。
#指定した一行を削除する場合 **********************
>>> A
x  y  z
a  1  2  3
b  4  5  6
c  7  8  9
d  0  0  0
#に対し'd'行を削除します

>>> A=A.drop('d')
>>> A
x  y  z
a  1  2  3
b  4  5  6
c  7  8  9

#もし次のように指定すれば、
>>> A.drop('d')
x  y  z
a  1  2  3
b  4  5  6
c  7  8  9

>>> A
x  y  z
a  1  2  3
b  4  5  6
c  7  8  9
d  0  0  0
#となってAは書き換わりません。
  • A.drop(行名リスト)
行名をリストで指定した分(複数行)を削除します。
#指定した複数行を削除する場合 ********************
>>> A
x   y   z
a   1   2   3
b   4   5   6
c   7   8   9
d  10  11  12
e  13  14  15
#に対し、'd','e'行を削除します。

>>> A=A.drop(['d','e'])
>>> A
x  y  z
a  1  2  3
b  4  5  6
c  7  8  9

節はじめに戻る

3.6.2.列追加/削除

(1)リスト/Numpy配列で列追加

  • A['列名']=Data (列名はAに含まれないcolumns名を指定)
  • A.loc[:,'列名']=Data
#スカラーで指定
>>> A['w']=0		#A.loc[:,"w"]=0でも同じ結果
>>> A
x  y  z  w
a  1  2  3  0
b  4  5  6  0
c  7  8  9  0

#リストで指定
>>> bl = [10,11,12]
>>> A['w']=bl	#A.loc[:,"w"]=blでも同じ結果
>>> A
x  y  z   w
a  1  2  3  10
b  4  5  6  11
c  7  8  9  12

#Numpy配列で指定
>>> bn=np.array([10,11,12])
>>> A['w']=bn	#A.loc[:,"w"]=bnでも同じ結果
>>> A
x  y  z   w
a  1  2  3  10
b  4  5  6  11
c  7  8  9  12

節はじめに戻る


(2)DataFrameで列追加

  • pandas.concat([A,B], axis=1)
#追加データフレーム
>>> bpd=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['u','v','w'])
>>> bpd
u  v  w
a  1  2  3
b  4  5  6
c  7  8  9

#右側に追加
>>> pd.concat([A,bpd],axis=1)
x  y  z  u  v  w
a  1  2  3  1  2  3
b  4  5  6  4  5  6
c  7  8  9  7  8  9

#左側に追加
>>> pd.concat([bpd,A],axis=1)
u  v  w  x  y  z
a  1  2  3  1  2  3
b  4  5  6  4  5  6
c  7  8  9  7  8  9

#追加するDataFrameのindex、columnsを指定しなかった場合
>>> bpd=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])
>>> pd.concat([A,bpd])
x    y    z    0    1    2
a  1.0  2.0  3.0  NaN  NaN  NaN
b  4.0  5.0  6.0  NaN  NaN  NaN
c  7.0  8.0  9.0  NaN  NaN  NaN
0  NaN  NaN  NaN  1.0  2.0  3.0
1  NaN  NaN  NaN  4.0  5.0  6.0
2  NaN  NaN  NaN  7.0  8.0  9.0

>>> pd.concat([A,bpd],axis=1)
x    y    z    0    1    2
a  1.0  2.0  3.0  NaN  NaN  NaN
b  4.0  5.0  6.0  NaN  NaN  NaN
c  7.0  8.0  9.0  NaN  NaN  NaN
0  NaN  NaN  NaN  1.0  2.0  3.0
1  NaN  NaN  NaN  4.0  5.0  6.0
2  NaN  NaN  NaN  7.0  8.0  9.0

>>> pd.concat([A,bpd],axis=0)
x    y    z    0    1    2
a  1.0  2.0  3.0  NaN  NaN  NaN
b  4.0  5.0  6.0  NaN  NaN  NaN
c  7.0  8.0  9.0  NaN  NaN  NaN
0  NaN  NaN  NaN  1.0  2.0  3.0
1  NaN  NaN  NaN  4.0  5.0  6.0
2  NaN  NaN  NaN  7.0  8.0  9.0

節はじめに戻る


(3)列削除

  • A.drop('列名',axis=1)
列名で指定した一列分を削除します。
>>> A
x  y  z   w
a  1  2  3  10
b  4  5  6  11
c  7  8  9  12

>>> A=A.drop('w',axis=1)
>>> A
x  y  z
a  1  2  3
b  4  5  6
c  7  8  9
列名をリストで指定した分(複数列)を削除します。
  • A.drop(列名リスト,axis=1)
>>> A
x  y  z  u  v  w
a  1  2  3  1  2  3
b  4  5  6  4  5  6
c  7  8  9  7  8  9
#に対し、u,v列を削除します。

>>> A.drop(['u','v'],axis=1)
x  y  z  w
a  1  2  3  3
b  4  5  6  6
c  7  8  9  9

節はじめに戻る

参考文献

関連ページ