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

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

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

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

Q&A

解決済

2回答

527閲覧

could not convert string to float: '\ufeff400' というエラーが出てcsvファイルが読み込めません。

taiko

総合スコア4

Python

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

0グッド

0クリップ

投稿2023/04/26 09:43

101×101の数値データ(温度)が入ったscvファイルを読み込んで、コンター図を作りたいのですが、
could not convert string to float: '\ufeff400'
というエラーが出てしまい、図が作成できません。

解決策を教えていただきたいです。
何卒よろしくお願いいたします。

プログラムは以下の通りです。これを実行すると上記のエラーが出てきてしまいます。

p2 = np.loadtxt('sine.csv',delimiter=',') #この部分で読み込みエラーが出てしまっています。

yy,zz = [],[]
y = p2[0,:]
z = p2[:,0]
y = y[1:]
z = z[1:]

for num in range(len(z)):
yy.append(y)
for num in range(len(y)):
zz.append(z)
X = np.array(yy)
Y = np.array(zz).T

p2 = np.delete(p2,0,1)
p2 = np.delete(p2,0,0)

plt.contourf(Y,X,p2,cmap="rainbow")
plt.colorbar()
plt.show()
plt.xlim([0,100])
plt.ylim([-100,100])

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

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

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

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

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

guest

回答2

0

別回答で指摘されているように、読み込むcsvはExcelで作られたものなのでしょう、BOM付きUTF-8になっているからです。
numpy.loadtxtはパラメータにencodingを指定できますので、そこに 'utf-8-sig' (BOM付きUTF-8)を指定するのもいいでしょう。

https://numpy.org/doc/stable/reference/generated/numpy.loadtxt.html#numpy-loadtxt

python

1p2 = np.loadtxt('sine.csv',delimiter=',', encoding='utf-8-sig')

投稿2023/04/26 12:14

TakaiY

総合スコア12765

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

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

taiko

2023/04/26 15:09

回答していただきありがとうございます。一つ学ぶことができました。こちらの方法でも試してみます。
guest

0

ベストアンサー

エンコーディングがBOM付きのUTF-8のファイルになっていると思われます。

ファイルをBOM無しのUTF-8にしましょう。
Windows標準のメモ帳で開いて「名前を付けて保存」でも変更できます。
それ以外のOSならエンコーディング変換のコマンドがあるかと思います。

投稿2023/04/26 10:12

otn

総合スコア84555

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

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

taiko

2023/04/26 15:10

書き出したcsvファイルをターミナルのnkfコマンドでBOM無しのUTF-8にしたらうまくできました。 ありがとうございます。
otn

2023/04/26 16:24

\ufeff というのを見たら「UnicodeのBOM」と思ってください。
taiko

2023/04/27 01:13

LC_ALL=C sed -e $'1s/^\xef\xbb\xbf//' sine.csv > sine_noBOM.csv nkfコマンドではなく、ターミナルでこちらのコードを打ってうまくいきました。 わかりました。 丁寧にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問