よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

Pandasでcsvを書く

今回はPythoncsvを書きます。    

前回  
書く 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スプレッドシートで見てみます。  

↓  

f:id:chayarokurokuro:20190909051720j:plain



  インデックスやヘッダーを何も指定せずに書くと自動的に番号が割り振られるようです。  

デフォルトで index=True , header=True。  

indexとheaderをFalseで書き込む  


何も指定せずだと番号が自動で振られましたので、それを外して書き込んでみる。


df.to_csv(file_name,header=False,index=False)


Googleスプレッドシートで見てみる    

f:id:chayarokurokuro:20190909051808j:plain


自動の番号割り振りがなくなりました。    



区切り文字 (sep)


保存する時の区切り文字は指定なしのデフォルトで, カンマ。     テキストエディタで見ると、カンマで区切られている。   ↓
 

f:id:chayarokurokuro:20190909051825j:plain


指定するときは 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)



テキストエディタで見ると  

f:id:chayarokurokuro:20190909053903j:plain


値がスペースで区切られている。     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) 


テキストエディタで見ると  

f:id:chayarokurokuro:20190909051858j:plain



追加分はあえて区切りを指定せず(カンマ区切りで)追記した。  

こんなことすると読むときに処理がおかしくなる…。  



  普通はプログラムの中にデータを直接書き込むようなことはしないで、Excelやデータベースを読み込み、必要なところだけ加工して取り出すとかして書き込む。

Pandasのデータ検索や絞り込み方法など細かいことはまた別の機会で。     今回はここまで。