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

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

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

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

Python

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

Q&A

解決済

1回答

10062閲覧

Pythonでcsvから行方向のデータを読み込みたい

jvdt41563

総合スコア12

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/07/31 09:51

pythonでcsvファイルのデータを読み込む場合に以下のようにすると書いてありましたが、このプログラムでは列方向のリストを作ることがでるますが、行方向のリストを作ることはできますか?
また、データの書き込みで、このプログラムだと、行方向に書き込まれますが、列方向に書き込むことはできますか?


f =
[1,2,3]
[4,5,6]
[7,8,9]

list = [1,2,3] >>> list = [1,4,7]

該当のソースコード

f = csv.reader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True) header = next(f) print(header) for row in f: time.append(row[0]) print(time) f = open('no_gravity.csv', 'w') writer = csv.writer(f, lineterminator='\n') writer.writerow(time)

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

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

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

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

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

guest

回答1

0

ベストアンサー

行方向のリストを作ることはできますか?

基本的に行方向に読みとり、列方向にしたいときは転置します。

Python

1import csv 2 3with open('data.csv') as f: 4 data = [] 5 for row in csv.reader(f): 6 data.append(row) 7 8print(data) 9 10data2 = [list(col) for col in zip(*data)] 11print(data2)

実行結果 Wandbox

[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']] [['1', '4', '7'], ['2', '5', '8'], ['3', '6', '9']]

行方向に書き込まれますが、列方向に書き込むことはできますか?

次のように出力したいということですか?

1 4 7

それならば、csvではなく普通にテキストだと思えば良いです。

Python

1with open('dst.csv', 'w') as f: 2 for elem in data2[0]: 3 print(elem, file=f)

コメントを受けて

plain

11.1,1.2,1.3 22.1,2.2,2.3

Python

1import csv 2 3with open('src.csv') as fin: 4 data = [] 5 for row in csv.reader(fin): 6 data.append(row) 7 8data = zip(*data) 9with open('dst.csv', 'w') as fout: 10 csv.writer(fout).writerows(data)

投稿2018/07/31 10:01

編集2018/07/31 12:53
LouiS0616

総合スコア35658

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

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

jvdt41563

2018/07/31 10:47

zip(*data)を使ってやってみましたが、データが少数の値のため、 [1.045, 1.042, 1.039]が [' 1 ', ' 1 ' , ' 1 ' , ' . ' , ' . ' , ' . ' , ' 0 ' , ' 0 ' , ' 0 ' , ........ というようになります。
LouiS0616

2018/07/31 10:56

dataはどのように読み取っていますか?
jvdt41563

2018/07/31 12:15

time = next(f) 行方向で読み込むためにこのようにしています。
LouiS0616

2018/07/31 12:20

一行目だけ読めれば良いということですか?
jvdt41563

2018/07/31 12:27

time = next(f) time2 = next(f) と続けると、1行目、2行目と読み込めました。 この読み取った少数のデータを縦方向のリストにしたいのです。 もしくは、forループを使って一列ずつ取り出して計算を行いたいです。
LouiS0616

2018/07/31 12:32

timeにはヘッダーを読み込み、time2に小数のデータを読み込むのでしょうか。 そしてtime2だけ縦方向に出力したいと。合っていますか?
LouiS0616

2018/07/31 12:33

一行目と二行目をわざわざ別の変数に放り込んでいる理由が見当もつかないのですが。
jvdt41563

2018/07/31 12:37

どちらも小数のデータを読み取っています。 timeの1列目とtime2の1列目、2列目どうしの計算を行いたいので
LouiS0616

2018/07/31 12:40

もとのデータが 1.1,1.2,1.3 2.1,2.2,2.3 だったら、 このように出力したいということですか? 1.1,2.1 1.2,2.2 1.3,2.3
jvdt41563

2018/07/31 12:44

そういうことです。
LouiS0616

2018/07/31 12:53

追記しました。
jvdt41563

2018/07/31 13:05

解決しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問