Youtubeでも活動中

チャンネル登録してくれたら喜びます。
リンクフリー。共有・拡散は大歓迎!

このボタンで簡単にチャンネル登録!
PR

【Python】numpyで横方向にCSV出力する方法について解説。

line-up-horizontally-when-using-numpy-to-output-csv-eyecatch

 Pythonのnumpyを使った時に、CSV出力することは多々あると思います。numpyの場合、デフォルトでは縦方向に改行されて保存されます。ただ、横方向に保存したい場合もあると思います。今回はそんなnumpyの出力方法を変えて、横方向(行方向)に保存する方法について解説します。

 これがマスターできると、例えば、[10,20,30]という配列があった場合に、

10
20
30
デフォルトでCSV出力した場合の結果のイメージ

↑こうなっていたのが、

102030
横方向に保存していく今回の方法の結果のイメージ

こんな感じで保存できるようになります。この方法が使いたくなるシチュエーションでよくあるのが、
CSV出力するときの一番上のデータラベルをつけるときではないでしょうか?

 実はやり方は至って単純なのですが、あまり情報が出ていないので今回解説してみました。この記事が役に立ったと思ったら拡散お願いします!

この記事を読むことでわかること

numpyを使ってCSV出力する時に横方向にも保存することが可能になる。

自己紹介

東証一部上場企業でサラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

転職に成功して現在は超大手企業でシステム系の開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

注意

本ブログはアフィリエイトを用いた広告を掲載しています。

numpyでCSV出力する方法のおさらい

 まず、numpyを使ったCSV出力の方法ですが、
これはおさらいになります。ただ、ここで詰まっている場合、
この先の話に進めないので一旦解説しておきます。

 丁寧に解説していくのがモットーなので、
そんなことわかってる!という場合は、どんどん先に進んでいってくださいね~

numpyでCSV出力する方法のおさらい
  • Pythonを起動して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で開いたのがこちらです↓↓

保存したcsvを開いたもの。

 [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つの方法があります。好きなものを選んでください。

CSVに横方向に保存する方法(二次元配列に変換する方法)
  • [[]]で囲む。
  • reshapeを使う。
  • インデックスの[None]を使う。

[[]]で囲む。

 まず初めの解決方法ですが、二重カッコで囲む方法です。

 今までご紹介してきた[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点だけ忘れなければ大丈夫です。

 

コメント

タイトルとURLをコピーしました