Pythonのnumpyを使った時に、CSV出力することは多々あると思います。numpyの場合、デフォルトでは縦方向に改行されて保存されます。ただ、横方向に保存したい場合もあると思います。今回はそんなnumpyの出力方法を変えて、横方向(行方向)に保存する方法について解説します。
これがマスターできると、例えば、[10,20,30]という配列があった場合に、
10 |
20 |
30 |
↑こうなっていたのが、
10 | 20 | 30 |
こんな感じで保存できるようになります。この方法が使いたくなるシチュエーションでよくあるのが、
CSV出力するときの一番上のデータラベルをつけるときではないでしょうか?
実はやり方は至って単純なのですが、あまり情報が出ていないので今回解説してみました。この記事が役に立ったと思ったら拡散お願いします!
numpyを使ってCSV出力する時に横方向にも保存することが可能になる。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
本ブログはアフィリエイトを用いた広告を掲載しています。
numpyでCSV出力する方法のおさらい
まず、numpyを使ったCSV出力の方法ですが、
これはおさらいになります。ただ、ここで詰まっている場合、
この先の話に進めないので一旦解説しておきます。
丁寧に解説していくのがモットーなので、
そんなことわかってる!という場合は、どんどん先に進んでいってくださいね~
Pythonを起動してnumpyを使えるようにする。
まずはnumpyが使えるようにしておかないとこの話は進みません。
まずは、pip install numpyを実行しましょう。
もう既にnumpyがインストールされている場合は、
本文(新規のpythonファイル)にimport numpyと打ち込むと
色が変わって認識されます。
他にも、コンソール上でpip listと打つとVer.が表示されたりします。
テキトーに配列を作る。
numpyが使えるようになったところで、
テキトーに配列を作りましょう。
今回は、冒頭でも使った、[10,20,30]を作ってみましょう。
作り方は、numpyを使って配列の要素を指定するだけでOK。
import numpy
testList = numpy.array([10,20,30])
print(testList)
注意点としては、numpy.array()の中で配列を作るので[]で囲むところです。
[]が無いとエラーになるので注意です。
print文で[10 20 30]と返ってきていることが確認できると思います。
とりあえずCSVとして出力する。
さて、次にCSV出力してみましょう。
CSVへの出力はnumpyの基本機能として実装されているので難しく考える必要はありません。
こんな感じになります。
import numpy
testList = numpy.array([10,20,30])
numpy.savetxt('testListSave.csv',testList)
saveList = numpy.loadtxt('testListSave.csv')
print(saveList)
一応念のためsaveした内容が正しいかloadtxtしています。
saveされた内容をexcelで開いたのがこちらです↓↓
[10 20 30]で出力したはずなのに、Eとか変な文字はいってんじゃん!と思ったかもしれませんが、デフォルトでは基本こうなります。E+01というのは、10^1という意味なので、1.00E+01 = 10ということです。同様に1.00E+3となっていたら1000ということですね。ですから表示上の違いというだけで数値自体は正しいので安心して下さい。
もし整数を整数として保存したいなら
ちょっと寄り道ですが、整数で保存したいのに…という方のために、整数で保存する方法もお伝えしておきます。整数で保存したい場合は、savetxtの時に工夫してあげる必要があります。
具体的には、引数にfmtを追加します。では実際どうなるかというと、
import numpy
testList = numpy.array([10,20,30])
numpy.savetxt('testListSave.csv',testList,fmt = '%d')
saveList = numpy.loadtxt('testListSave.csv')
print(saveList)
これだけです。
本題:numpyの配列をCSVに保存するときに横に保存したい。
さて、本題です。CSVに保存できるのはいいのですが、デフォルトでは縦に保存されます。※上の章を復習してください。
では、横に保存していきたい場合はどうするか?答えは二次元配列で1行3列に変換すること。その方法は少なくともこれから紹介する3つの方法があります。好きなものを選んでください。
[[]]で囲む。
まず初めの解決方法ですが、二重カッコで囲む方法です。
今までご紹介してきた[10 20 30]ではなく、[[10,20,30]]にするイメージです。
実際にやるとこうなります。
import numpy
testList = numpy.array([[10,20,30]])
numpy.savetxt('testListSave.csv',testList,delimiter = ',' , fmt = '%d')
注意点としては、[[10,20,30]]とするだけでは、CSV上ではA1セルに10 20 30と入るだけ。
CSV上でA1,B1,C1と保存する場合には、delimeter = ‘,’がsavetxtの引数に追加が必要です。
CSVはカンマ区切りで次のセルに行く仕様なので、’,’を追加する必要があるということです。
[[]]にするだけで横方向に保存できるというのは知らない人も多いかも…
reshapeを使う。
他にも、二次元にする方法はreshapeなんかも使えます。例えば、今回の例だと、1行3列にしたいわけですから、reshapeを使うとこうなります。
import numpy
testList = numpy.array([10,20,30])
testList = numpy.array(testList).reshape(-1,3).tolist()
numpy.savetxt('testListSave.csv',testList,delimiter = ',',fmt = '%d')
インデックスの[None]を使う。
インデックスの[None]とは、まずこんな風にやってもらうとわかります。
import numpy
testList = numpy.array([10,20,30])
print(testList[None])
こうすると、出力されるのは、[[10 20 30]]となります。
つまり、これまでやってきた内容と同じというわけです。
この状態でsavetxtすれば、ちゃんと横方向に10 20 30と保存されます。
つまりインデックスの[None]を使って保存するとこんな感じ。
import numpy
testList = numpy.array([10,20,30])
print(testList[None])
numpy.savetxt('testListSave.csv',testList[None],delimiter = ',',fmt = '%d')
今回のまとめ:やり方を覚えれば難しい話ではない!
今回はnumpyでCSVファイルに保存するときに、横方向にデータを並べる方法についてご紹介しました。意外と横につなげてCSVファイルに保存するって悩むんですよね…
やり方も3つほどご紹介しましたが、結局どれも結果は同じになりますから、あなたのお好きな方法を選んでくれればそれでOKです!
ポイントとしては、一次元配列⇒二次元配列に置き換えること。それから、ただの配列ではなく、savetxtの時に忘れずにdelimiterにカンマを追加すること。この2点だけ忘れなければ大丈夫です。
コメント