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

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

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

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

2059閲覧

ある特定のString型文字列を、Float型数値に変換する方法

shin_shin

総合スコア96

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2018/05/08 02:07

やりたいことが二つあります:

  1. df[col1]の中に下記のような文字列が入っていたら、マイナスの数値(Float型)に変更したい。

例)
'- 0.001' → -0.001 
'- 0.002' → -0.002
'- 0.003' → -0.003

  1. それ以外の文字列は、そのままFloat型に変換したい。

例)
'- 0.004' → 0.004 
'- 0.005' → 0.005
'- 0.006' → 0.006

ご教授のほど、よろしくお願いいたします。

一応下記は、一つ一つの観測値を上記のように変換する関数です。

Python

1#正規表現のインポート 2import re 3 4def strToFloat(a): 5 6 #いろいろ設定 7 stringNum = a 8 positive = False 9 Float = 0.0 10 11 # '-'を含む場合 positive フラグを立てる 12 if re.search('-',stringNum) is None: 13 print('正の数!') 14 positive = True 15 else: 16 print('負の数!') 17 18 # 数字部分を抽出する 19 Floatabs = float(re.search('\d+.\d*',stringNum).group()) 20 print('絶対値は'+ str(Floatabs) ) 21 22 # 先ほどの positive フラグを参照し、必要ならば-1を掛ける 23 if positive == True: 24 Float = Floatabs 25 else: 26 Float = Floatabs * -1 27 return Float

この関数をデータフレームに適応してみましたが、エラーが出ました。

Python

1df[col1].apply(strToFloat(a))

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

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

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

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

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

fuzzball

2018/05/08 02:36 編集

1と2の例の違いが分からないのですが。「下記のような文字列」が何なのか具体的に書いて下さい。
coco_bauer

2018/05/08 02:42

0.001,0.002,0.003だけを特別扱いするという事ですか????
guest

回答2

0

間に挟まってるスペースを削除して変換すればいいのでは
あるいは先頭の文字をチェックして、マイナスであれば変換後の数値の符号を変えるとか


python

1if stringNum.IndexOf('-')>=0: 2 return -float(stringNum[1:]) 3 4return float(stringNum[1:])

投稿2018/05/08 02:09

編集2018/05/08 02:23
y_waiwai

総合スコア87719

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

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

0

ベストアンサー

text

1'- 0.004' → 0.004  2'- 0.005' → 0.005 3'- 0.006' → 0.006

これはきっと'0.004'等なのだろうと見当をつけた回答です。

python

1>>> import pandas as pd 2>>> df = pd.DataFrame(["- 0.001", "- 0.002", "- 0.003", "0.004", "0.005", "0.006"]) 3>>> df[0] 40 - 0.001 51 - 0.002 62 - 0.003 73 0.004 84 0.005 95 0.006 10Name: 0, dtype: object 11>>> df[0].apply(lambda s: -float(s[2:]) if s[0] == "-" else float(s)) 120 -0.001 131 -0.002 142 -0.003 153 0.004 164 0.005 175 0.006 18Name: 0, dtype: float64

ちなみに質問文の関数でもdf[0].apply(strToFloat)とすれば機能するようですが、特別な事情がない限り上のような方法で十分だと思います。

あと、余計なお世話かもしれませんが、pythonの命名規則に従った方が良いかと・・・。

はじめに — pep8-ja 1.0 ドキュメント

投稿2018/05/08 02:58

編集2018/05/08 03:32
hayataka2049

総合スコア30933

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問