Pandasでcsvを書く
前回
書く csvモジュールでcsvファイルを。 - よちよちpython
その他参考
csvモジュールでcsvファイルを読む - よちよちpython
PandasでCSVファイルを読む - よちよちpython
個人的なことでどうでもよいことですが、Qpythonをインストールし直したらpipが動かなくて(sslがどうちゃら、とか、そもそもpipモジュールがないとか言われる)、Pydroid3でこれを書いている。 今までなぜ普通に動かせていたのか謎…
作業環境
Androidスマホ
Pydroid3のJupyterNotebook(python3.7)
目次
Pandasでcsvを書く
Pandasを使うのでモジュールのインストールが必要です。
to_csv()
を使います。
適当にDataFrameを作ってcsvファイルを新規作成してみます。
import pandas as pd # データ df = pd.DataFrame([ ["アクセス日","タイトル","URL"], ["20190910","気象庁過去の気象データ・ダウンロード","https://www.data.jma.go.jp/gmd/risk/obsdl/index.php"], ["20190910","Scott Henderson New Release PEOPLE MOVER","https://www.scotthenderson.net/people_mover.htm"] ]) # csvファイルの保存名 file_name = "Test_to_csv.csv" # Pandasで書き込み df.to_csv(file_name)
書き込みの実行をしました。
作業ディレクトリに新規作成されたcsvファイルをGoogleスプレッドシートで見てみます。
↓
インデックスやヘッダーを何も指定せずに書くと自動的に番号が割り振られるようです。
デフォルトで index=True , header=True
。
indexとheaderをFalseで書き込む
何も指定せずだと番号が自動で振られましたので、それを外して書き込んでみる。
df.to_csv(file_name,header=False,index=False)
自動の番号割り振りがなくなりました。
区切り文字 (sep)
保存する時の区切り文字は指定なしのデフォルトで, カンマ
。
テキストエディタで見ると、カンマで区切られている。
↓
指定するときは sep=" " などと書く。
delimiter=" "
とか書くと、書き込み実行時にTypeErrorが出る。
試しにスペースを区切り文字に指定して書き込んでみる。
# また新規作成 file_name2 = "Test_to_csv2.csv" df2 = pd.DataFrame([ ["品番","商品名","単価"], ["55","ペカリランプ","550"], ["893","鉄砲玉","8930000"] ]) df2.to_csv(file_name2,sep=" ",index=False,header=False)
↓ テキストエディタで見ると
値がスペースで区切られている。
Tab区切りも同様にsep="\t"
とすればOK。
追記
既存のcsvに追加でデータを書き込むには、mode="a"
を付ける。
# 既存ファイル名(上の商品一覧表に追記する) file_name = "Test_to_csv2.csv" # 2行追加 df3 = pd.DataFrame([ ["1192","1万票","5000000"], ["119","火炎瓶","2000"] ]) df3.to_csv(file_name,mode="a",header=False,index=False)
↓ テキストエディタで見ると
追加分はあえて区切りを指定せず(カンマ区切りで)追記した。
こんなことすると読むときに処理がおかしくなる…。
普通はプログラムの中にデータを直接書き込むようなことはしないで、Excelやデータベースを読み込み、必要なところだけ加工して取り出すとかして書き込む。
Pandasのデータ検索や絞り込み方法など細かいことはまた別の機会で。 今回はここまで。