Pandas Dataframe:从字符串中提取数值(包括小数)

doy*_*oyz 3 python pandas

我有一个由一列字符串组成的数据框。我想提取这些字符串的数字。但是,有些值以米为单位,有些以公里为单位。我如何检测数字旁边是否有“m”或“km”,标准化单位然后将数字提取到新列?

details                 numbers
Distance                350m
Longest straight        860m
Top speed               305km
Full throttle           61 per cent
Run Code Online (Sandbox Code Playgroud)

期望的输出:

details                 numbers
Distance                350
Longest straight        860
Top speed               305000
Full throttle           61
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 7

用:

m = df['numbers'].str.contains('\d+km')
df['numbers'] = df['numbers'].str.extract('(\d+)', expand=False).astype(int)
df.loc[m, 'numbers'] *= 1000 

print (df)
            details  numbers
0          Distance      350
1  Longest straight      860
2         Top speed   305000
3     Full throttle       61
Run Code Online (Sandbox Code Playgroud)

解释:

  1. 通过以下方式获取km值的掩码contains
  2. 提取整数值并转换intextract
  3. 正确km的多个值

编辑:对于提取float的价值观改变正则表达式中extract通过该解决方案,最后也投给floatS:

print (df)
            details      numbers
0          Distance        1.7km
1  Longest straight       860.8m
2         Top speed        305km
3     Full throttle  61 per cent

m =  df['numbers'].str.contains('\d+km')
df['numbers'] = df['numbers'].str.extract('(\d*\.\d+|\d+)', expand=False).astype(float)
df.loc[m, 'numbers'] *= 1000 
print (df)
            details   numbers
0          Distance    1700.0
1  Longest straight     860.8
2         Top speed  305000.0
3     Full throttle      61.0
Run Code Online (Sandbox Code Playgroud)