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

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

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

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

Python 3.x

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

Q&A

解決済

2回答

6825閲覧

pythonでexcelで作成したcsvファイルをNumpyモジュールで読み込みたいのだがerrorが出てしまう。

kum

総合スコア16

CSV

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

Python 3.x

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

0グッド

0クリップ

投稿2017/09/08 06:00

python
コード

import numpy as np
dat=np.loadtxt('test.csv',delimiter=',',dtype=float)
||||###前提・実現したいこと
excelで作成した文字のみのcsvファイルをfloat型の数値リストをdatに格納したいと思っていまうすが、errorがでてしまいます。

実装中に以下のエラーメッセージが発生しました。

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

C:\Anaconda3\python.exe "C:/Users//PycharmProjects/test/Package1/read csv file of excel.py"
Traceback (most recent call last):
File "C:/Users//PycharmProjects/test/Package1/read csv file of excel.py", line 3, in <module>
dat=np.loadtxt('C:/Users/beam20170526/てst.csv',delimiter=',',dtype=int)
File "C:\Anaconda3\lib\site-packages\numpy\lib\npyio.py", line 985, in loadtxt
items = [conv(val) for (conv, val) in zip(converters, vals)]
File "C:\Anaconda3\lib\site-packages\numpy\lib\npyio.py", line 985, in <listcomp>
items = [conv(val) for (conv, val) in zip(converters, vals)]
File "C:\Anaconda3\lib\site-packages\numpy\lib\npyio.py", line 697, in <lambda>
return lambda x: int(float(x))
ValueError: could not convert string to float:

読み込もうとしているexcelファイルは以下のものです。
0 0 23 27 0 157 221 0
0 0 0 0 324 0 0 0
0 0 0 130 0 0 0 109
0 0 0 218 0 111 0 84
198 154 10 0 0 0 0 0
12 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 61 4 0 12 96
80 0 0 130 156 0 0 0
53 0 26 74 0 0 91 0
0 0 0 38 0 0 0 138
0 0 0 0 34 0 0 0
0 59 0 0 100 0 0 0
94 27 0 0 0 21 0 0
0 0 24 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 96 45 0 172 0 0
0 0 0 57 34 0 0 0
0 0 0 0 0 0 0 0
24 0 0 0 0 0 0 44
0 0 0 0 77 57 0 0

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

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

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

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

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

guest

回答2

0

ベストアンサー

'test.csv'はカンマではなくタブで区切られているようです。
であればdelimiter=','ではなくdelimiter='\t'を指定すれば読み込めます。

Python

1import numpy as np 2dat=np.loadtxt('test.csv',delimiter='\t',dtype=float) 3print(dat) 4s = " " # ついでに検証。""内はタブ文字。teratailにアップ後もタブ文字か?
[[ 0. 0. 23. 27. 0. 157. 221. 0.] [ 0. 0. 0. 0. 324. 0. 0. 0.] [ 0. 0. 0. 130. 0. 0. 0. 109.] [ 0. 0. 0. 218. 0. 111. 0. 84.] [ 198. 154. 10. 0. 0. 0. 0. 0.] [ 12. 0. 0. 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0. 0. 0.] [ 0. 0. 0. 61. 4. 0. 12. 96.] [ 80. 0. 0. 130. 156. 0. 0. 0.] [ 53. 0. 26. 74. 0. 0. 91. 0.] [ 0. 0. 0. 38. 0. 0. 0. 138.] [ 0. 0. 0. 0. 34. 0. 0. 0.] [ 0. 59. 0. 0. 100. 0. 0. 0.] [ 94. 27. 0. 0. 0. 21. 0. 0.] [ 0. 0. 24. 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0. 0. 0.] [ 0. 0. 96. 45. 0. 172. 0. 0.] [ 0. 0. 0. 57. 34. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0. 0. 0.] [ 24. 0. 0. 0. 0. 0. 0. 44.] [ 0. 0. 0. 0. 77. 57. 0. 0.]]

追記:teratail書込時に元文字列のタブ文字がどうなるか検証した結果

teratailへの書込時、タブ文字は4個のスペースに置換されてしまうようです。
質問文の提示CSVは4個のスペースで区切られているので元CSVはタブ区切りと推測しましたが、実際に4個のスペースで区切られている場合は、delimiter=' 'と指定してください。

投稿2017/09/08 06:10

編集2017/09/08 06:53
can110

総合スコア38234

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

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

kum

2017/09/08 06:25

回答ありがとうございます。 バックスラッシュは\と置き換えて入力してもいいのでしょうか? \で置き換えて実行してもうまく行きませんでした。 dtype=str と置き換えて実行するとうまくいくようです。
can110

2017/09/08 06:37

「delimiter='\t'」をそのままコピペして(バックスラッシュのまま)でよいです。 ただ、それでも同じエラーになるのであれば、区切り文字はタブでない可能性があります。 よって区切りが(何個の)スペースなのかタブなのかを確認すべきです。 >dtype=str と置き換えて実行するとうまくいくようです。 これだと単に文字列(str)として読み込んでいるので、区切り文字に関係なく成功します。 数値(float)として読み込みたければ正しい区切り文字を指定しないといけません。 ちなみにteratailへの書込み時、タブ文字は4個のスペースに置換されてしまうようなので、元CSVはタブ区切りと推測しました。 そこで、こちらでは提示されたCSV内容の4個のスペースをタブに置換したうえで検証しています。
kum

2017/09/09 03:34

メモ帳で開くとデリミタは','であることが分かりました。 ですが、errorは解消されませんでした。genfromtxtを使用することでなんとか読み込むことができているのでこのまま進めていきます。 ありがとうございました。
guest

0

提示されたファイルはカンマ区切りでなくスペース3個区切りのようですので、

delimiter=',' の代わりに delimiter=' ' (''の中はスペース3個)とすれば読めると思いますよ。

投稿2017/09/08 06:04

hiro-k

総合スコア902

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

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

hiro-k

2017/09/08 06:16

タブでしたか・・・コピペしたら空白3個だったのですが、それはこちら側のどこかでタブから変換されたものだったのでしょうかね。
can110

2017/09/08 06:57

おそらくteratailに書込み時にタブ→スペースに置換されるようです。 元CSVの区切り文字が何かは、質問者様の環境で確認しないと分からないですね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問