如何用数值代替范畴值?

2024-09-26 17:47:41 发布

您现在位置:Python中文网/ 问答频道 /正文

在dataframe中,所有的值都是object类型,例如:>20<1>5等。 上界=35和Lowerbound=0所以如果列中的值是<1,那么我想用平均值替换这个值,即(0(Lowerbound值)+1)/2=0.5

类似地,{/27如果值被^替换为^ 2.5

如何将现有的数据帧转换为所需的格式。注意:col1中的值是字符串,而不是数值。在

现有数据帧:

d = {'col1': ['>20', '<5', '<1','>10']}
df = pd.DataFrame(data=d)
df
      col1  
0     >20     
1     <5
2     <1
3     >10
4     100-200
5     10-20

我想将上面的df转换为:

^{pr2}$

Tags: 数据字符串类型dataframedfdataobject格式
2条回答

通过子字符串使用^{},然后使用^{}

df['col2'] = pd.eval(df['col1'].replace(['>','<'], ['35+','0+'], regex=True)) / 2
print (df)
  col1  col2
0  >20  27.5
1   <5   2.5
2   <1   0.5
3  >10  22.5

编辑:

^{pr2}$

编辑:

上面的Probl解决方案是它只能处理100行(见bug),所以需要其他解决方案:

df = pd.read_csv('train_jqd04QH(1).csv', usecols=['experience', 'company_size'])


s1 = df['experience'].replace(['>','<', '-'], ['35+','0+', '+'], regex=True)

#added anothr repalce string, `\+$` is match last + like 1000+
s2 = df['company_size'].replace(['>','<', '-', '/', '\+$'], 
                                ['35+','0+', '+', '+', '+35'], regex=True)

df['experience'] = s1.str.split('+', expand=True).astype(float).mean(axis=1)
df['company_size'] = s2.str.split('+', expand=True).astype(float).mean(axis=1)

print (df.head())

   experience  company_size
0         3.0         300.0
1        14.0           5.0
2         6.0          74.5
3        14.0          74.5
4         8.0           NaN

你可以用^{}来做这个。在

df.replace({'>20':27.5, '<5':2.5, '<1':0.5, '>10':22.5})

虽然我有一种感觉,你想要填写的数值没有经过很好的计算。范围是否不如下:

^{pr2}$

相关问题 更多 >

    热门问题