Irohabook
0
7931

pandasのDataFrameで条件の否定を指定する(~で否定を表す)

pandas の DataFrame から特定の行を除く方法。今回はあるカラム名の要素が「〜で終わっている」という条件を満たす行を除いてみる。

結論

条件指定に ~ をつける。

df2 = df.loc[~df['市区町村名'].str.endswith('区')]

説明

扱うデータは宮城県の自治体別人口で、出展は総務省統計局である。まずは pandas で csv ファイルを読みこむ。これは read_csv を使う。

import pandas as pd

df = pd.read_csv('宮城県.csv')

次のデータが読みこまれる。

      市区町村名         人口
0      仙台市計  1,060,545
1    仙台市青葉区    292,649
2   仙台市宮城野区    189,777
3    仙台市若林区    134,919
4    仙台市太白区    228,310
5     仙台市泉区    214,890
6        石巻    146,162
7        塩竈     54,873
8       気仙沼     64,947
9        白石     34,718
10       名取     78,460
11       角田     29,713
12      多賀城     62,474
13       岩沼     44,221
14       登米     81,094
15       栗原     69,382
16      東松島     40,247
17       大崎    132,321
18       富谷     52,635

出展
総務省統計局 - 人口・世帯

きちんと pandas の DataFrame が出力された。次に、データから仙台市青葉区などの区を除く。

import pandas as pd

df = pd.read_csv('宮城県.csv')
df2 = df.loc[~df['市区町村名'].str.endswith('区')]

結果はこうなる。

   市区町村名         人口
0   仙台市計  1,060,545
6     石巻    146,162
7     塩竈     54,873
8    気仙沼     64,947
9     白石     34,718
10    名取     78,460
11    角田     29,713
12   多賀城     62,474
13    岩沼     44,221
14    登米     81,094
15    栗原     69,382
16   東松島     40,247
17    大崎    132,321
18    富谷     52,635

「区」の行だけが除かれた。ポイントは ~ という記号で、これは loc 条件の否定にあたる。つけないとどうなるか?

     市区町村名       人口
1   仙台市青葉区  292,649
2  仙台市宮城野区  189,777
3   仙台市若林区  134,919
4   仙台市太白区  228,310
5    仙台市泉区  214,890

区のつく行だけが出力された。

今回は pandas の endswith を使って行を抽出した。文字列の条件指定は pandas の強力な道具である。

pandasの条件にendswithやstartswithなどを指定する

次の記事

pandas