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

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

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

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

Python 3.x

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

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

5864閲覧

numpy genfromtxt でutf-8ファイルを読み込む際のUnicodeDecodeErrorについて

rkrk

総合スコア7

NumPy

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

Python 3.x

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

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2016/08/12 09:28

###前提・実現したいこと
numpy genfromtxt でutf-8ファイルに書かれた日本語を読み込む際に、UnicodeDecodeErrorが出てしまいます。

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

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 1: ordinal not in range(128)

###該当のソースコード

python3.4

1import numpy as np 2data = np.genfromtxt("hoge.tsv", delimiter="\t", names=True, dtype=float, converters={1: lambda x: x.decode('utf_8')})

###試したこと
hoge.tsvはutf-8できちんとコーディングできていることを確認しています。
一行目がヘッダー、二行目以下は小数や整数が並んでいます。
一行目のヘッダーのところにのみ日本語が用いられていて、
「日付_2015年」「性別」のようなヘッダーがついています。
ヘッダー行を抜かしたファイルを作成したところ、正しく読み込むことができました。

python3.4

1import sys 2sys.getdefaultencoding()

この結果は
'utf-8'
とpython自体のデフォルトはutf-8であることは確認しています。

###補足情報(言語/FW/ツール等のバージョンなど)
python3.4, OSX 10.9.5, numpy 1.11.0 を用いています。

どのようにすればヘッダー行を読み込むことができるのでしょうか。
ここここなどを参考にしています。
dtypeの指定の仕方が間違っているのかと思うのですが、これ以上どのようにすれば良いのかが分かりません。

ご教示いただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

↓で先に回答出てしまいましたが、同じ結論です。

python - numpy genfromtxt でutf-8ファイルを読み込む際のUnicodeDecodeErrorについて - スタック・オーバーフロー
http://ja.stackoverflow.com/questions/28214/numpy-genfromtxt-%E3%81%A7utf-8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E9%9A%9B%E3%81%AEunicodedecodeerror%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

_bytes_to_name() ではヘッダ行のバイト列を ASCII コーデックにデコードしようとしてエラーが発生する事になります。

ヘッダーの列名が必要なら、上記回答のように別途読み込んで作成する、ですかね。
ヘッダーの列名が不要なら、Names=Trueの代わりにskip_header=1をセットして読み飛ばしてしまえばOKです。

参考リンク:

numpy.genfromtxt — NumPy v1.11 Manual
http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html

投稿2016/08/12 13:14

argius

総合スコア9388

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

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

rkrk

2016/08/12 13:27

ありがとうございます。ヘッダー行にだけ日本語を用いていると、別途読み込んで作成するしかないのですね。あるいはskip_header=1で飛ばしてしまうか・・・ 本当にありがとうございました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問