なろう分析記録

『小説家になろう』をふくめ『ネット小説投稿サイト』を分析する。コード置き場,主にPython,javascript,たまに創作。

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

出力ファイル

f:id:karupoimou:20190429004042p:plain
csv出力

トラブルシューティング

CSVが保存できない

CSVがエクセルなどで開かれている場合は出力エラーが出る。

カラム数と行の数が合わないというエラーが出る

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

f:id:karupoimou:20190429033946p:plain

カンマを含む文字列を数字に変換して配列に入れる

#カンマを外す処理

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

f:id:karupoimou:20190430191643p:plain
エクセル出力
f:id:karupoimou:20190430194857p:plain

この例では「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}

のところで指定を挟んでいます。

f:id:karupoimou:20190430201350p:plain
デフォルトの場合
f:id:karupoimou:20190430201254p:plain
指定後

エクセルファイルの新しいシートに追記する方法

dfの内容を.xlsxファイルの新しいシートに追記することも可能です。

以下のページの「既存excelファイルに新しいシートを追加する方法」のサンプルコードを参考にするとよいです。
(inEXL.book.worksheets のところをin EXL.book.worksheetsに修正すると動きます)

qiita.com

またはこちらの作例をご参考に。

karupoimou.hatenablog.com

参考ページ

yolo.love

なおindex=を使うことで、一列目に行名を入れることもできる。