Pythonで「Panadas」を使って配列データをCSV・xlsxファイルに書き込む
CSVに読み書きするなら「Pandas」が定番らしい
Pythonで配列(list)を簡単にCSV化する方法としては「Pandas」を使うのが一般的。
「Pandas」を使うことで簡単にCSVの読み書きが可能となる。
今回はは配列リストを書き込むサンプルコードを紹介。
サンプルコード
import pandas as pd listA = ["0001", "TARO", "man"] listB = ["0002", "HANAKO", "woman"] Coulum = ['id', 'name', 'sex'] # データフレームを作成 df = pd.DataFrame([listA,listB], columns=Coulum) # CSV ファイル出力 df.to_csv("pandas_test.csv") #結果の表示 df
出力ファイル
トラブルシューティング
カラム数と行の数が合わないというエラーが出る
columns= で設定している数以上の配列を含む行が存在する場合、エラーが出る。
その場合、columns= を削除することなどでエラー回避可能。columns=は別に必須ではない。
import pandas as pd listA = ["0001", "TARO", "man", "man", "man", "man"] listB = ["0002", "HANAKO", "woman"] # データフレームを作成 df = pd.DataFrame([listA,listB]) # CSV ファイル出力 df.to_csv("pandas_test.csv") #結果の表示 df
あれこれしてみる
複数の配列をひとつにまとめる
import pandas as pd newlist = [] listA = ["0001", "TARO", "man", "man", "man", "man"] listB = ["0002", "HANAKO", "woman"] newlist.append(listA) newlist.append(listB) df = pd.DataFrame(newlist) # CSV ファイル出力 df.to_csv("pandas_test.csv") #結果の表示 df
カンマを含む文字列を数字に変換して配列に入れる
#カンマを外す処理
list=[]#空リスト作成 str_list = ['-10', '0', '1,000']#カンマを含む配列 for i in str_list: int_list = int(i.replace(",", ""))#ここでカンマを外す処理 list.append(int_list)#ここでlistに収納 #結果の表示 list
そのほかの方法
karupoimou.hatenablog.com
.xlsx(エクセルファイル)形式で出力する方法
#エクセルファイルに出力 import requests import pandas as pd exportlist = [] a = [1,500,501,1001,1501] b = [1,500,501,1001,1501] c = [1,500,501,1001,1501] exportlist.append(a) exportlist.append(b) exportlist.append(c) # Xlsx ファイル出力 df = pd.DataFrame(exportlist)#pandasのデータフレームに収納 df.T.to_excel('All_OUTPUT2.xlsx', sheet_name='new_sheet_name'); df
この例では「All_OUTPUT2.xlsx',」にファイルが出力されます。
URLを文字列としてExcelに書き込み
デフォルトではhttpから始まる文字列はエクセルに持っていく際にURLリンクとして扱われてしまいます。またその場合、以下の255文字以上うんぬんのエラーがでることもあります。
with link or location/anchor > 255 characters since it exceeds Excel's limit for URLS
force_unicode(url))
これを回避する方法として、「ExcelWriter」を使って、書き出しのオプションを指定する方法があります。
#ExcelWriterで書き込むテスト import pandas as pd exportlist = [] a = [1,500,501,1001,'https://karupoimou.hatenablog.com/'] b = [1,500,501,1001,1501] c = [1,500,501,1001,1501] exportlist.append(a) exportlist.append(b) exportlist.append(c) df = pd.DataFrame(exportlist)#pandasのデータフレームに収納 #ExcelWriterで書き込みファイル、オプションを指定 writer = pd.ExcelWriter('test.xlsx',options={'strings_to_urls': False}) df.to_excel(writer, sheet_name="new_sheet_name")#Writerを通して書き込み writer.close() df
,options={'strings_to_urls': False}
のところで指定を挟んでいます。
エクセルファイルの新しいシートに追記する方法
dfの内容を.xlsxファイルの新しいシートに追記することも可能です。
以下のページの「既存excelファイルに新しいシートを追加する方法」のサンプルコードを参考にするとよいです。
(inEXL.book.worksheets のところをin EXL.book.worksheetsに修正すると動きます)
またはこちらの作例をご参考に。