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 の強力な道具である。