类型为'float'的对象在字符串对象上没有len()

时间:2019-10-26 12:54:29

标签: python-3.x pandas

我正在尝试转换数据框中的列,该列的名称为'Weight',其值为str格式

例如:"175lbs"

我正在使用映射器将所有这些值转换为float

我使用映射器尝试了lambda函数

def WeightConverter(w):
    return float(w[:len(w)-3])

df1['Weight'] = df1.Weight.map(lambda x : WeightConverter(x))
df1['Weight'].head()

但是,type(df1['Weight'][0])返回str。预期结果:175.0类型的float

1 个答案:

答案 0 :(得分:4)

尝试首先使用正则表达式提取数字,然后您可以进行任何进一步的操作。

df = pd.DataFrame({'Weight' : np.random.randint(0,250,size=500)})
df['Weight'] = df['Weight'].astype(str) + 'lbs'
print(df.head(10))
   Weight
0  224lbs
1   11lbs
2  218lbs
3  132lbs
4   55lbs
5   87lbs
6   62lbs
7    4lbs
8   38lbs
9  218lbs

然后将(\d+)str.extract一起使用

df['Weight_Float'] = df['Weight'].str.extract(r'(\d+(?:\.\d+)?)').astype(float)
    print(df.head(10))
     Weight  Weight_Float
0  119lbs         119.0
1    7lbs           7.0
2  241lbs         241.0
3   85lbs          85.0
4  144lbs         144.0
5  219lbs         219.0
6  160lbs         160.0
7  173lbs         173.0
8  166lbs         166.0
9   35lbs          35.0

说明:

  • (启动一个捕获组
  • \d速记字符类,它匹配所有数字;它是 与[0-9]相同
  • +一个或多个表达式
  • )结束捕获组