如何从浮动字符中删除字符?

时间:2016-02-17 14:55:28

标签: python pandas

我目前的数据框如下所示:

   Idnumber    Ownership    Date
    1            100        2006
    2            >50        2006 
    1            80         2007
    3            NaN        2006

所有权列目前的类型为float。我想要的是在idnumber上创建一个groupby函数,返回每个Idnumber的最大值。 问题是,对于像>这样的事情是不可能的。 <或者在那里(错误:无法解决的类型:float()> = str())。

  df['Ownership'] = df['Ownership'].astype(str)
  df['Ownership'] = df['Ownership'].map(lambda x: x.strip('± = > + <'))
  df['Ownership'] = df['Ownership'].astype(float).fillna(0.0)
  df['Ownershipadjusted']= df['Ownership'].groupby([df['Idnumber'],df['Ownership']]).max()

实际上不起作用,因为将其转换回float会产生错误:无法将字符串转换为float。

         df['Ownership'] = df['Ownership'].apply(pd.to_numeric, errors='coerce')

也没有所需的效果。 是否有更直接的方法从浮点数中删除符号,或者使这种转换有效?

为避免混淆,这就是我所需要的:

 Idnumber    Ownership    Date      Ownership adjusted
    1            100       2006      100
    2            50        2006       50
    1            80        2007      100
    3            0         2006        0

当然,数据框包含的观察结果远远超过4次

1 个答案:

答案 0 :(得分:3)

dtype投放到str,然后投放extract数字并将dtype投回float

In [215]:
df['Ownership'] = df['Ownership'].astype(str).str.extract('(\d+)').astype(float)
df

Out[215]:
   Idnumber  Ownership  Date
0         1        100  2006
1         2         50  2006
2         1         80  2007
3         3        NaN  2006

您的groupby声明也是错误的,您需要这样做:

In [218]:
df['Ownershipadjusted']= df.groupby(['Idnumber'])['Ownership'].transform('max')
df

Out[218]:
   Idnumber  Ownership  Date  Ownershipadjusted
0         1        100  2006                100
1         2         50  2006                 50
2         1         80  2007                100
3         3        NaN  2006                NaN