如何删除列中的特殊字符并将列转换为float?

时间:2019-03-31 05:46:27

标签: python pandas

我想删除列中的最后一个字符并将列转换为float。列的类型是对象。

##[error]No web project was found in the repository. Web projects are identified by presence of either a web.config file or wwwroot folder in the directory.
##[error]Project file(s) matching the specified pattern were not found.

我尝试使用13.3\T 9.4\J 24.09006465036784\C 24.4140625\B 35.73069852941176\M ,但没有成功。

df[column] = df[column].str[:5]

它没有删除最后一个字符。 遇到错误。无法将字符串转换为浮点数

2 个答案:

答案 0 :(得分:1)

使用以下命令删除最后2个字符并转换为float:

this.storage.get('LANG').then((vallang) => {
  if (vallang) {
    this.detailsfetch(vallang);
  }
});

this.events.subscribe('language:select', (data) => { // update from app.component.ts
  if (data) {
    this.detailsfetch(data);
  }
});

您还可以使用以下方法:

df[column] = df[column].str[:-2].astype(float)

然后您可以使用以下内容将数据四舍五入到小数点后两位:

df[column] = pd.to_numeric(df[column].str[:-2])

输出:

df = df.round(2)

print(df)

答案 1 :(得分:1)

您可以使用Series.str.extract获取floatsintegers,然后由Series.astype进行投射,并由Series.round进行最后一轮:

df['column'] = (df['column'].str.extract(r'(\d+\.\d+|\d+)', expand=False)
                            .astype(float)
                            .round(2))
print (df)
   column
0   13.30
1    9.40
2   24.09
3   24.41
4   35.73

如果始终只浮动:

df['column'] = df['column'].str.extract(r'(\d+\.\d+)', expand=False).astype(float).round(2)
print (df)
   column
0   13.30
1    9.40
2   24.09
3   24.41
4   35.73

编辑:

def my_round(x): 
    x = x.str.extract(r'(\d+\.\d+)', expand=False) 
    x = x.astype(float).round(2) 
    return(x) 

df.iloc[:, 61:64] = df.iloc[:, 61:64].astype(str).apply(my_round) 

另一个想法是只转换对象非数字列:

cols = df.iloc[:, 61:64].select_dtypes(object).columns
df[cols] = df[cols].apply(my_round)