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

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

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

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

NumPy

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

Python

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

Q&A

解決済

2回答

527閲覧

csvから取得したリストの型を変換したい(python)

zy70

総合スコア4

CSV

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

NumPy

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

Python

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

0グッド

0クリップ

投稿2023/01/29 02:36

初学者です。
以下、ご教示いただけますと幸いです。

実現したいこと

(要約)
pythonでcsvから取得した値をint32に変換したい。

(詳細)
取得した座標を他のファイルでも使えるようにする目的で、
一旦csvに保存して別ファイルで開きなおしたところ、
dtypeが<U10(もしくは<U11)と表示されるようになりました。
元の状態ではdtypeがint32となっていたため、同じようにint32にならないかと思います。

ウェブ上で変換に関連する記事は多数あるもののの、うまく再現できないため、ご教示いただけますと幸いです。

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

Exception has occurred: _UFuncNoLoopError
ufunc 'subtract' did not contain a loop with signature matching types (dtype('<U11'), dtype('<U10')) -> None

該当のソースコード(pythonファイル)

import csv
import numpy as np

with open("/python-test/csv-test.csv", 'r',encoding="utf-8") as f:
reader = csv.reader(f)
l = [row for row in reader]

bl2 = (l[0][0])
tl2 = (l[0][1])
br2 = (l[0][2])
tr2 = (l[0][3])

p1 = np.array(tl2)
p2 = np.array(tr2)
p3 = np.array(bl2)
p4 = np.array(br2)

# 幅取得
o_width = np.linalg.norm(p2 - p1)
o_width = math.floor(o_width * w_ratio)

# 高さ取得
o_height = np.linalg.norm(p3 - p1)  ←ここでエラーが出ます
o_height = math.floor(o_height)

該当のソースコード(csvファイル)

"(287, 892)","(315, 384)","(1199, 882)","(1158, 372)"

以上です。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ast.literal_eval で数値の tuple に変換してもよいかと思います。

python

1import csv 2import math 3import numpy as np 4from ast import literal_eval 5 6with open("/python-test/csv-test.csv", 'r',encoding="utf-8") as f: 7 reader = csv.reader(f) 8 bl2, tl2, br2, tr2 = [literal_eval(column) for row in reader for column in row] 9 10p1 = np.array(tl2) 11p2 = np.array(tr2) 12p3 = np.array(bl2) 13p4 = np.array(br2) 14

投稿2023/01/29 03:23

melian

総合スコア19798

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

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

zy70

2023/01/29 04:36

melian様 アドバイスありがとうございます。 うまく動くようになりました。途方に暮れていたのでとてもうれしいです。 他の方からも早いレスポンスでアドバイスを頂ける中で甲乙つけがたかったのですが、 より具体的にコードまで記載していただけたことから、 初学者の私にとってはより助かり、ベストアンサーにさせていただきました。
guest

0

エラーの原因は、値の型が文字列(Uxx)のままだからです。
よってbl2 = int(l[0][0])なりで数値にすればよいです。
ただそもそもなのですがnumpy.loadtxtで読み込んだ方が楽だと思います。

投稿2023/01/29 02:52

can110

総合スコア38266

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

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

zy70

2023/01/29 04:33

can110様 ものすごい早いレスポンスでアドバイスをいただき、ありがとうございます。 従来の方法に加えて、異なる方法(numpy.loadtxt)もご教示いただき、幅が広がりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問