如何将str转换为pandas中的float

时间:2017-07-17 11:43:41

标签: python string pandas dataframe type-conversion

我试图将我的数据集字符串转换为浮点类型。这里有一些背景:

import pandas as pd
import numpy as np
import xlrd
file_location = "/Users/sekr2/Desktop/Jari/Leistungen/leistungen2_2017.xlsx"
workbook = xlrd.open_workbook(file_location)
sheet = workbook.sheet_by_index(0)

df = pd.read_excel("/Users/.../bla.xlsx")

df.head()

    Leistungserbringer Anzahl Leistung     AL      TL      TaxW    Taxpunkte
 0  McGregor Sarah  12  'Konsilium'     147.28  87.47   KVG     234.75
 1  McGregor Sarah  12  'Grundberatung' 47.00   67.47   KVG     114.47
 2  McGregor Sarah  12  'Extra 5min'    87.28   87.47   KVG     174.75
 3  McGregor Sarah  12  'Respirator'    147.28  102.01  KVG     249.29
 4  McGregor Sarah  12  'Besuch'        167.28  87.45   KVG     254.73

为了继续努力,我需要找到一种方法来创建一个新列:  df['Leistungswert'] = df['Taxpunkte'] * df['Anzahl'] * df['TaxW']

TaxW显示字符串' KVG'每个条目。我从数据中知道' KVG' = 0.89。我试图将字符串转换为浮点数而撞墙。我不能只使用float类型创建一个新列,因为此代码应该与其他输入一起使用。在TaxW列中,大约有7个不同的条目具有所有不同的值。

我很感谢有关此事的所有信息。

KVG = 0.92

2 个答案:

答案 0 :(得分:5)

假设TaxW不是map_ = {'KVG' : 0.89, ... } # add more fields here 中唯一可能的字符串值,您应该将字符串映射存储到它们的浮点等效项中,如下所示:

Series.map

然后,您可以使用In [424]: df['Leistungswert'] = df['Taxpunkte'] * df['Anzahl'] * df['TaxW'].map(map_); df['Leistungswert'] Out[424]: 0 2507.1300 1 1222.5396 2 1866.3300 3 2662.4172 4 2720.5164 Name: Leistungswert, dtype: float64

df.transform

或者,您可以使用In [435]: df['Leistungswert'] = df.transform(lambda x: x['Taxpunkte'] * x['Anzahl'] * map_[x['TaxW']], axis=1); df['Lei ...: stungswert'] Out[435]: 0 2507.1300 1 1222.5396 2 1866.3300 3 2662.4172 4 2720.5164 Name: Leistungswert, dtype: float64

 extension NSAttributedString {

     convenience init(htmlString:String){   
         do {       
             try self.init(data: htmlString.data(using: .utf8)!, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], documentAttributes: nil)       
         } catch {       
             print(error.localizedDescription)       
         }   
     }

     func toHtml(location:Int,length:Int) -> String {   
         let documentAttributes = [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType]   
         let range = NSRange.init(location: location, length: length)   
         do {       
             let htmlData = try self.data(from: range, documentAttributes: documentAttributes)       
             let htmlString = String(data: htmlData, encoding: .utf8)       
             return htmlString!       
         } catch {       
             return error.localizedDescription       
         }   
     }
 }

答案 1 :(得分:5)

使用来自@COLDSPEED的map_映射的替代解决方案:

In [237]: df.assign(TaxW=df['TaxW'].map(map_)) \
            .eval("Leistungswert = Taxpunkte * Anzahl * TaxW", inplace=False)
Out[237]:
  Leistungserbringer  Anzahl       Leistung      AL      TL  TaxW  Taxpunkte  Leistungswert
0     McGregor Sarah      12      Konsilium  147.28   87.47  0.89     234.75      2507.1300
1     McGregor Sarah      12  Grundberatung   47.00   67.47  0.89     114.47      1222.5396
2     McGregor Sarah      12     Extra 5min   87.28   87.47  0.89     174.75      1866.3300
3     McGregor Sarah      12     Respirator  147.28  102.01  0.89     249.29      2662.4172
4     McGregor Sarah      12         Besuch  167.28   87.45  0.89     254.73      2720.5164