New サムネイル CSSでプレースホルダー(placeholder)の色を変える:ベンダープレフィックスをカンマつ New サムネイル GolangでGoogle Cloud Storageに画像やファイルをアップロードする(os. New サムネイル GoでMySQLやMariaDBのtimestampを読みこむ:データベース接続時に?parse

pandasでDataFrameをcsvファイルに書き出す(to_csv):インデックスのありなしに注意しよう

広告

pandas で DataFrame を csv ファイルに書き出すには to_csv という関数を使う。次のコードがシンプルな結論だ。

df.to_csv('out.csv', sep=',', encoding='utf-8')

前回は東京都の人口データを使って、女性が男性よりも 1.1 倍多い 10 万人以上の自治体を選択した。

import pandas as pd

df = pd.read_csv('population.csv', thousands=',')
rows = df.loc[(df['総数'] > 100000) & (df['女'] > df['男'] * 1.1)]

rows には次のデータがある。

    市区町村     世帯数      総数       男       女   人口密度
1    中央区   91852  162502   77241   85261  15916
2    港 区  145865  257426  121326  136100  12638
4    文京区  121128  221489  105462  116027  19618
9    目黒区  156583  279342  132206  147136  19042
11  世田谷区  479792  908907  431026  477881  15657

これを out.csv に書き出してみよう。といっても 1 行追加するだけ。

import pandas as pd

df = pd.read_csv('population.csv', thousands=',')
rows = df.loc[(df['総数'] > 100000) & (df['女'] > df['男'] * 1.1)]

rows.to_csv('out.csv', sep=',', encoding='utf-8')

これでファイルが書き出される。

pandas to_csv

,市区町村,世帯数,総数,男,女,人口密度
1,中央区,91852,162502,77241,85261,15916
2,港 区,145865,257426,121326,136100,12638
4,文京区,121128,221489,105462,116027,19618
9,目黒区,156583,279342,132206,147136,19042
11,世田谷区,479792,908907,431026,477881,15657

左に数値が出てしまっている。これはもとの DataFrame のインデックスである。

pandas の to_csv でインデックスを消す

to_csv のオプション引数で index=False をつけると、書き出したファイルからインデックスが消える。

import pandas as pd

df = pd.read_csv('population.csv', thousands=',')
rows = df.loc[(df['総数'] > 100000) & (df['女'] > df['男'] * 1.1)]

rows.to_csv('out.csv', sep=',', encoding='utf-8', index=False)

print(rows)

書き出したファイルの中身。インデックスが消えている。

市区町村,世帯数,総数,男,女,人口密度
中央区,91852,162502,77241,85261,15916
港 区,145865,257426,121326,136100,12638
文京区,121128,221489,105462,116027,19618
目黒区,156583,279342,132206,147136,19042
世田谷区,479792,908907,431026,477881,15657

ダブルクォーテーションで要素を囲う

上の例ではデータがむき出しになっている。ダブルクォーテーションでデータを囲うには、次のように quotechar と quoting を設定する。

import pandas as pd
import csv

df = pd.read_csv('population.csv', thousands=',')
rows = df.loc[(df['総数'] > 100000) & (df['女'] > df['男'] * 1.1)]

rows.to_csv('out.csv', sep=',', encoding='utf-8', index=False, quotechar='"', quoting=csv.QUOTE_ALL)

print(rows)

ヘッダーも含めてすべてダブルクォーテーションで囲まれた。

"市区町村","世帯数","総数","男","女","人口密度"
"中央区","91852","162502","77241","85261","15916"
"港 区","145865","257426","121326","136100","12638"
"文京区","121128","221489","105462","116027","19618"
"目黒区","156583","279342","132206","147136","19042"
"世田谷区","479792","908907","431026","477881","15657"

ポイント: quoting と quotechar でダブルクォーテーション

広告

広告

広告

コンピューター コンピューター
プログラミング プログラミング
数学 数学
英語 英語
国語 国語
理科 理科
社会 社会

Python入門

Python入門

化学入門

化学入門

漢字辞典

漢字辞典

整数辞典

漢字辞典

Lord Candy

Lord Candy