🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

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

Python

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

Q&A

解決済

3回答

1011閲覧

CSVファイルの数字文字を数字に変換したい

nasee

総合スコア15

CSV

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

Python

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

0グッド

0クリップ

投稿2019/12/14 02:08

csvファイルを読み込むと,数字データが文字列に扱われるとのこと.
それをintで変換しょうとしてもエラーでできません.

ネットで調べると数字データは下記の形式ゆえ,replaceで ” 取り除いてからint関数を使うように書かれていた.
それを実行しても ” は取り除かれません. ’ を取り除くようにすると一見取り除かれたように見えましたが,intで数字にはできませんでした.

どうやれば数字になるのでしょうか.```python
コード

n="'3,000'"
n

"'3,000'"

n.replace('"',"")

"'3,000'"

n.replace("'","")

'3,000'

int(n)

Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module>
int(n)
ValueError: invalid literal for int() with base 10: "'3,000'"

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

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

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

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

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

guest

回答3

0

ベストアンサー

イメージ説明

投稿2019/12/14 08:06

katoy

総合スコア22324

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

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

nasee

2019/12/14 09:25

うまくいきました. 最初に 「 ' 」 をなくすまでは分かるのですが, 次の 「 , 」はもともとないの何故必要なのか分かりませんが, それでも解決できたのですっきりしました. 他の方に教えてもらったやり方でもできました.いろんなやり方があるのですね. ありがとうございます.
guest

0

数字に出来ない、という場合は、そいつが数字(だけの)文字列ではない、ということです。
そいつのナカミがどういうもの(数字だけしかないの)か、そいつが一体何なのか(文字列かそうでないか)を確認してみてはどうでしょう

投稿2019/12/14 02:33

y_waiwai

総合スコア88040

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

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

LouiS0616

2019/12/14 02:38

タイトル以外も読みましたか?
y_waiwai

2019/12/14 08:10

数字以外の文字が入ってるって話ではなかったですかね? そうじゃなかったなら私の勘違いですが。
LouiS0616

2019/12/14 08:16

数字以外の文字を除去したいけどできない、という趣旨の質問です。 余計な文字が紛れ込んでいることは質問者さんは理解していますし、コードを見れば試行錯誤している様子も見て取れます。
LouiS0616

2019/12/14 08:18 編集

マークダウンの影響でコード部が崩れていますが、元々次のように書いてあったのでしょう。 これを見れば『文字列かそうでないか』の確認など必要無いことは明らかです。 >>> n="'3,000'" >>> n "'3,000'" >>> n.replace('"',"") "'3,000'" >>> n.replace("'","") '3,000' >>> int(n) Traceback (most recent call last): File "<pyshell#44>", line 1, in <module> int(n) ValueError: invalid literal for int() with base 10: "'3,000'"
y_waiwai

2019/12/14 08:24

ああ、私の回答が間違ってるわけじゃなかったんですね。ありがとうございます
nasee

2019/12/15 07:22

何となくいろんなものが混じっていることは想像していました. それでtypeとかreprとかで調べたのですが,うまくいきませんでした. まだpythonを独学して2ヶ月足らず,分からないことが多く,今後とも教えていただきたくお願いします.
guest

0

str型オブジェクトはimmutableであるため、str.replaceメソッドは破壊的メソッドではなく、新たなオブジェクトを生成して返しもとのオブジェクトには影響を与えません。

なので

python

1n = n.replace("'", "")

などのようにする必要があります。

投稿2019/12/14 02:12

hayataka2049

総合スコア30935

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

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

nasee

2019/12/14 02:23

n = n.replace("'", "")を実行しても,int(n)はエラーでできませんでした.
hayataka2049

2019/12/14 02:42

どんなエラーですか? そのときのnはどんな値になっていますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問