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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

Q&A

解決済

1回答

976閲覧

csvファイルデータをnumpy配列に変換する際に発生したValue errorの解決方法を教えて下さい。

YSK7110

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

0グッド

0クリップ

投稿2020/10/08 09:13

前提・実現したいこと

Python3.6、Jupyter Notebookを使用しています。
1時間後の風速を予測するためにRNNの構築をしたいと考えています。
風速、風向、気温、現地気圧、海面気圧、相対湿度の6つを入力としているのですがこれらをcsvファイルから読み込み、numpy配列に変換するところでValue errorが発生しました。
この問題の解決方法を教えてください。

※2010-2014までの一時間ごとの各データ(それぞれのデータ数は43824個)を使用しています。

該当のソースコード

import os

data_dir = r'ファイルの場所'
fname = os.path.join(data_dir, 'ファイル名.csv')

f = open(fname)
data = f.read()
f.close()

lines = data.split('\n')
header = lines[0].split(',')
lines = lines[1:]

print(header)
print(len(lines))

→結果
['Datetime', 'Windspeed[m/s]', 'Wind_direction[deg]', 'Temperature[℃]', 'Local barometric pressure[hPa]', 'Sea level pressure[hPa]', 'Relative humidity[%]']
43825

import numpy as np

float_data = np.zeros((len(lines), len(header) - 1))
for i, line in enumerate(lines):
values = [float(x) for x in line.split(',')[1:]]
float_data[i, :] = values

→結果:エラー発生
エラーメッセージ
ValueError Traceback (most recent call last)
<ipython-input-57-84dcbecc05f4> in <module>
4 for i, line in enumerate(lines):
5 values = [float(x) for x in line.split(',')[1:]]
----> 6 float_data[i, :] = values

ValueError: cannot copy sequence with size 0 to array axis with dimension 6

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

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

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

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

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

guest

回答1

0

ベストアンサー

CSVファイルの各行が常に7つの項目で構成されているのであれば、提示されたコードは正しく動作します。

つまり、CSVファイルの(先頭行を除く)各行の内容のうち、先頭列のDatetimeを除く6個のデータを要素とするリストvaluesで、あらかじめ0クリアされた状態のfloat_data[i]の内容を置き換えます。

おそらく、問題はCSVファイルの中に空行が含まれていることです。ValueError: cannot copy sequence with size 0 to array axis with dimension 6は、valuesのサイズが0で、6個の要素を必要とするfloat_data[i]に(サイズが違うので)コピーできないことを示しているからです。

対策としては、forループの内容を以下のようにします。

Python

1for i, line in enumerate(lines): 2 values = [float(x) for x in line.split(',')[1:]] 3 if len(values) != len(header) - 1: 4 continue 5 float_data[i, :] = values

空行の部分のデータは0のままになります。

投稿2020/10/08 13:06

編集2020/10/08 13:39
Daregada

総合スコア11990

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

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

YSK7110

2020/10/08 13:37

回答ありがとうございます。上記の通り実行したところエラーが出ずに動作しました。 csvファイルの1行目は日付データなのでそれ以外の6つのデータを入力として使用したい場合はこのコーディングで良いでしょうか?
Daregada

2020/10/08 13:43

日付は全く使わないのですか? そうでなければ、pandasのDataFrameに日付ごと読み込んだほうが楽だと思います。
YSK7110

2020/10/08 15:01

日付は時系列データとして入力のソートやRNN内の時間ウィンドウ幅に用いることができれば大丈夫です。 その場合、ご提案通りPandasで読み込んだ方がいいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問