Irohabook
0
2618

pandasのto_csvでカンマ区切りの数値を出力する:applyを使ってフォーマットを指定する

数値をカンマ区切りで書き出すときは、列全体に apply を適用させる。

df['人口'] = df['人口'].apply(lambda x: '{0:,}'.format(x))

apply は Python のリストでいう map に近い。つまり、それに属する要素のすべてにある関数を適用して、そのリスト(のようなもの)を返す。

この記事の結論はこれで終わり。

問題背景: pandas の to_csv で数値のカンマ区切りは指定できない

pandas の to_csv は数値をそのまま書き出す。カンマ区切りにしたいときは to_csv を使うデータフレームの要素を書き換えないといけない。

下はサンプルコード。

import pandas as pd

df = pd.read_csv('宮城県.csv', thousands=',')
df2 = df.loc[df['市区町村名'].str.endswith('区')].sort_values('人口', ascending=False)
df2['人口'] = df2['人口'].apply(lambda x: '{0:,}'.format(x))
df2.to_csv('仙台市.csv', index=False, sep='\t')

結果はこうなる。

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

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

ここで

df2['人口'] = df2['人口'].apply(lambda x: '{0:,}'.format(x))

を消すと、出力される仙台市青葉区の人口は 292649 となってカンマが消える。

次の記事

pandas