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

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

ただいまの
回答率

90.84%

  • Python 3.x

    4876questions

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

  • pandas

    417questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 118

KentoShin

score 22

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

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

  2. それ以外の文字列は、そのままFloat型に変換したい。
    例) 
    '-  0.004' → 0.004 
    '-  0.005' → 0.005
    '-  0.006' → 0.006

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

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

#正規表現のインポート
import re

def strToFloat(a):

    #いろいろ設定
    stringNum = a
    positive = False
    Float = 0.0

    # '-'を含む場合 positive フラグを立てる
    if re.search('-',stringNum) is None:
        print('正の数!')
        positive = True
    else:
        print('負の数!')

    # 数字部分を抽出する
    Floatabs = float(re.search('\d+.\d*',stringNum).group())
    print('絶対値は'+ str(Floatabs) )

    # 先ほどの positive フラグを参照し、必要ならば-1を掛ける
    if positive == True:
        Float = Floatabs
    else:
        Float = Floatabs * -1
    return Float

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

df[col1].apply(strToFloat(a))
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • fuzzball

    2018/05/08 11:35 編集

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

    キャンセル

  • coco_bauer

    2018/05/08 11:42

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

    キャンセル

回答 2

checkベストアンサー

0

'-  0.004' → 0.004 
'-  0.005' → 0.005
'-  0.006' → 0.006


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

>>> import pandas as pd
>>> df = pd.DataFrame(["- 0.001", "- 0.002", "- 0.003", "0.004", "0.005", "0.006"])
>>> df[0]
0    - 0.001
1    - 0.002
2    - 0.003
3      0.004
4      0.005
5      0.006
Name: 0, dtype: object
>>> df[0].apply(lambda s: -float(s[2:]) if s[0] == "-" else float(s))
0   -0.001
1   -0.002
2   -0.003
3    0.004
4    0.005
5    0.006
Name: 0, dtype: float64

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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


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

return float(stringNnum[1:])

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    4876questions

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

  • pandas

    417questions

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