最終更新日:2022/3/18
【説明すること】
- 1. 行の追加
- 1.1a 最後の行にlistから追加する :
df.loc['New']=li
- 1.1b 最後の行にseries(se)から追加する:
df.loc['New']= se.values
- 1.2 最後の行に全て同じ値の行を追加する :
df.loc['New]=1
- 1.3 任意の場所に行を追加する方法 : あるにはあるが…省略
- 1.1a 最後の行にlistから追加する :
- 2. 行の削除
- 2.1 index名で削除 :
df.drop(index = ['A', 'B'], inplace = True)
- 2.2 index番号で削除 :
df.drop(index = [0, 1])
- 2.3 index名とindex番号の組み合わせで削除:
df.drop(index = [0, 'A'])
- 2.1 index名で削除 :
- 3. 条件を指定して削除
- 3.1 列を指定し、特定の文字を含む行だけを削除 :
df_drop = df[ df['clm1'] != 'A' ]
- 3.2 複数の行と列を指定して、まとめて削除 :
df.drop(index=[0, 1], columns=[‘A’, ‘B’], inplace=True)
- 3.1 列を指定し、特定の文字を含む行だけを削除 :
1. 行の追加
ここでは自分で用意した「1行」を新しい行として追加(挿入)する方法を説明します。
Excelで言うと、2つのファイルがあり、一方から一行をコピーして、他方に張り付けるイメージです。
ここでは、以下のcsvファイルを読み込んで、コードの例を記述します。
1.1a 最後の行にlistから追加する: df.loc['New']=li
※li → df
自分で用意したlistを既存のdfに追加する場合です。最終行に追加されます。
考え方は列と同じですが、行の場合には.loc[]
をつけて、index名を指定する必要があります。
追加する行のindex名を’New’とした場合 df.loc['New'] =li
と書きます。
注意:listの長さ(要素の数:len(li1)でわかる)とdfの列数が一致しないとエラーになります。
例えば、listの長さがlen(li1)=4, dfの列数がlen(df.columns)=5の場合、エラーとなります。
1.1b 最後の行にseries(se)から追加する: df.loc['New']= se.values
※se → df
seからdfに行を追加する場合は、.values
を使って df.loc['New']= se.values
と書きます。
seの値だけをdfに追加するイメージです。これは、seのindex名や、dfのカラム名を気にする必要がありません。 つまり、seの形だけを整えれば、追加可能です。
1.2 最後の行に全て同じ値の行を追加する: df.loc['New']=1
全て1や全て0の列を追加したい場合です。小数でも構いません。 df.loc['new']=0.01
と書きます。ただし、最終行に追加されます。
文字列でも同じです。但し、文字列は「”」または「””」で囲む事を忘れないでください。
1.3 任意の場所に行を追加する方法: あるにはあるが…省略
任意の場所に行を追加したい場合もあるでしょう。
しかし、あまり有効な方法がありませんので、ここでは省略します。
読者の中には、例えば、.assign()
や.insert()
が使えるのではないか、と考える方もおられるでしょう。その発想は自然であり、それらを使えば確かに可能です。しかし、列のように簡単にはいきません。
そんな事をするぐらいなら、最初から元のデータ(csvファイルなど)を編集した方が楽ですし、間違いも少ないでしょう。
実際に、データ分析をする場合、任意の場所に行を追加する、という事は殆どありません。
2.行の削除
2.1 index名で削除 : df.drop(index = ['A', 'B'], inplace = True)
index名を指定して削除する場合、 df.drop(index=['A', 'B'])
と書きます。
元のdfを上書きする、inplace = True
も指定可能です。重要なのは、index=に指定するのはlistである点です。
2.2 index番号で削除 : df.drop(index = [0, 1])
index番号で指定して削除する場合、 df.drop(index = [0, 1])
と書きます。
2.3 index名とindex番号の組み合わせで削除:df.drop(index = [0,'A'])
indexが名前と番号の組み合わせの場合、index = []
にその名前と番号を指定します。 df.drop(index = [0,'A'])
以下は、inplace=True
を指定して、元のdfを書き換えた例です。
3. 条件を指定して削除
3.1 列を指定し、特定の文字を含む行だけを削除
df_drop = df[ df['clm1'] != 'A' ]
と書きます。考え方は、「特定の文字を『含まない行』だけを抽出する」です。
例えば、「列’clm1′ に’A’を含む全ての行を削除」したい場合です。この場合「列’clm1’がA『でない』ものだけを抽出(フィルター)する」、と考えます。
※抽出(フィルター)について、詳しくは後で説明します。
ここでは、以下のcsvファイルを読み込んで、コードを記述します。
3.2 複数の行と列を指定して、まとめて削除
df.drop(index=[0, 1], columns=['A', 'B'], inplace=True)
と書きます。.drop()
のオプションで、index=, columns=
を同時に指定します。
inplace = True
を指定すれば、元のdfが上書きされます。