Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

pandas データフレームの行や列を削除

イメージ
Sep 24, 2019

pandas データフレームの行や列を削除


実現したいこと


pandasでデータフレームの行や列を削除する動作を行う。


環境


python 3.7.3

pandas 0.25.1


実装


>>> df=pd.DataFrame(np.arange(12).reshape(3, 4),columns=['A', 'B', 'C', 'D'])
>>> df
   A  B   C   D
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11


カラムの削除

>>> df.drop(['B', 'C'], axis=1) # axis: 0がインデックス(デフォルト) 1がカラム
   A   D
0  0   3
1  4   7
2  8  11
>>> df.drop(columns=['B', 'C'])
   A   D
0  0   3
1  4   7
2  8  11


pythonでdel statementでも実現できる

>>> del df["B"]
や
>>> del (df["B"],df["C"])

のように使う


インデックスで行の削除

>>> df.drop([0, 1]) # インデックス0と1の行を削除
   A  B   C   D
2  8  9  10  11


特定の値を含む行を削除

>>> df = pd.DataFrame({'氏名': ['匿名', 'ジャイヤン', 'スネ夫', '匿名'],
... '性別': ['男', '男', '男', '女'],
... '恋人': ['しずか', '妹', 'ママ', 'のび太'],
... '性格': ['アホ', '横柄', 'ナルシスト', '良い子']},
... index=[1, 2, 3, 4])

>>> df
      氏名 性別   恋人     性格
1     匿名  男  しずか     アホ
2  ジャイヤン  男    妹     横柄
3    スネ夫  男   ママ  ナルシスト
4     匿名  女  のび太    良い子

氏名カラムに"匿名"が入っている行を全て削除する

df.drop(df.index[df['氏名'] == '匿名'], inplace=True)
>>> df
      氏名 性別  恋人     性格
2  ジャイヤン  男   妹     横柄
3    スネ夫  男  ママ  ナルシスト
>>> 


NaNが含まれる行を削除する

>>> df = pd.DataFrame([
... [1 , 2, None, None],
... [None, 1, 2, None],
... [None, None, None, None],
... ])


・すべてNaNな行を削除

>>> df.dropna(how="all")
     0    1    2   3
0  1.0  2.0  NaN NaN
1  NaN  1.0  2.0 NaN
>>> 


・一つでもNaNがある行を削除

>>> df = pd.DataFrame([
... [1 , 2, None, None],
... [None, 1, 2, None],
... [1, 3, 11, -3],
... ])
>>> df
     0  1     2    3
0  1.0  2   NaN  NaN
1  NaN  1   2.0  NaN
2  1.0  3  11.0 -3.0
>>>
>>> df.dropna(how="any")
     0  1     2    3
2  1.0  3  11.0 -3.0


・指定カラムの中でNaNがある行を削除

>>> df = pd.DataFrame([[1,2,3],[4,5,6],[None,8,9],[10,None,12],[None,14.15]], columns=['A','B','C'])
>>> df
      A      B     C
0   1.0   2.00   3.0
1   4.0   5.00   6.0
2   NaN   8.00   9.0
3  10.0    NaN  12.0
4   NaN  14.15   NaN

>>> df.dropna(subset=['A'], inplace=True) # AカラムのNaNがある行を削除
>>> df
      A    B     C
0   1.0  2.0   3.0
1   4.0  5.0   6.0
3  10.0  NaN  12.0
df = pd.DataFrame([[1,2,3],[4,5,6],[None,8,9],[10,None,12],[None,14.15]], columns=['A','B','C'])
>>> df
      A      B     C
0   1.0   2.00   3.0
1   4.0   5.00   6.0
2   NaN   8.00   9.0
3  10.0    NaN  12.0
4   NaN  14.15   NaN

>>> df.dropna(subset=['A','B'], inplace=True) # AカラムとBカラムでNaNがある行を全て削除
>>> df
     A    B    C
0  1.0  2.0  3.0
1  4.0  5.0  6.0