質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3301閲覧

複数の配列をcsvファイルに出力したい

napo5221

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/11/03 09:13

実現したいこと

Pythonを使って配列をcsvファイルに出力したいです。

発生している問題・エラーメッセージ

1つの配列は出力することはできたのですが、複数の配列でのやり方がわからず、困っております。

該当のソースコード

Python

1import numpy as np 2data=np.array([1, 2, 3]) 3data2=np.array([4, 5, 6]) 4data3=np.array([7, 8, 9,10]) 5np.savetxt('transposed.csv', data.T, header='Test', comments='')

補足情報(FW/ツールのバージョンなど)

イメージ説明
上に記載したコードでは上のようなcsvファイルが出力されましたが、data2,data3も出力して、下の画像にように2つ以上の配列を入れれるようにしたいです。
イメージ説明
1つの配列でのやり方はいくつか見つかったのですが、2つ以上のやり方がわかりません。
ご存知の方いらっしゃいましたら、教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

numpyは、長さの異なる配列をまとめて扱うのには、あまり向いていません。また、csvの出力についても得意とは言えません。
numpyにこだわりなければ、標準のcsvモジュールか、pandasを使うのが簡単です。
(どちらも itertools.zip_longest を使っています)

python

1import csv 2from itertools import zip_longest 3 4with open('transposed.csv', 'w', newline='') as f: 5 writer = csv.writer(f) 6 writer.writerow(['Test', 'Test2', 'Test3']) # ヘッダー 7 writer.writerows(zip_longest(data, data2, data3))

python

1from itertools import zip_longest 2import pandas as pd 3 4df = pd.DataFrame( 5 zip_longest(data, data2, data3), 6 columns=['Test', 'Test2', 'Test3']) 7df.to_csv('transposed.csv', index=False)

値が不足している部分はNaNになるので、その列がfloatになります。
それが嫌な場合DataFrameを作るときにdtype=objectを指定してやってください。

投稿2022/11/04 05:15

bsdfan

総合スコア4915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

napo5221

2022/11/04 17:55

pandasについて知見が無かったので調べて知識を増やすことができました。ありがとうございました。
guest

0

ベストアンサー

python

1import numpy as np 2 3data=np.array([1, 2, 3]) 4data2=np.array([4, 5, 6]) 5data3=np.array([7, 8, 9,10]) 6 7data_x = [data, data2, data3] 8ncol = max(map(len, data_x)) 9data_x = np.dstack([ 10 np.pad(i.astype(float), (0, ncol-len(i)), 'constant', constant_values=np.nan) 11 for i in data_x 12])[0] 13 14data_x = data_x.astype(str) 15data_x[data_x == 'nan'] = '' 16np.savetxt('transposed.csv', data_x, delimiter=',', fmt='%s', header='Test,Test2,Test3', comments='')

transposed.csv

csv

1Test,Test2,Test3 21.0,4.0,7.0 32.0,5.0,8.0 43.0,6.0,9.0 5,,10.0

投稿2022/11/03 09:43

melian

総合スコア21187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

napo5221

2022/11/04 17:56

stackでまとめて処理するのですね。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問