最終更新日:2022/3/18

【説明すること】

1. 行の追加

ここでは自分で用意した「1行」を新しい行として追加(挿入)する方法を説明します。
Excelで言うと、2つのファイルがあり、一方から一行をコピーして、他方に張り付けるイメージです。

ここでは、以下のcsvファイルを読み込んで、コードの例を記述します。

a004_002a.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ファイルを読み込んで、コードを記述します。

a004_001c.csv

3.2 複数の行と列を指定して、まとめて削除

df.drop(index=[0, 1], columns=['A', 'B'], inplace=True)


と書きます。.drop()のオプションで、index=, columns=を同時に指定します。

inplace = Trueを指定すれば、元のdfが上書きされます。