数値をカンマ区切りで書き出すときは、列全体に 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 となってカンマが消える。