使用astype方法将pandas中的数据帧分组

时间:2017-12-06 11:42:25

标签: python pandas

当我尝试将astype(float)方法应用于pandas中的分组数据框时,出现以下错误。

ValueError: could not convert string to float:   

你知道为什么我不能通过astype方法将字符串转换为浮点数的原因是什么?以及如何解决这个问题? 下面是我得到的代码错误和示例数据。

def group(self,agg_method):
    df=self.df

    grouped=df.groupby(['Tilt [deg]', 'Azimuth [deg]'],as_index=False)
    groupdf=grouped.agg(agg_method)
    print(groupdf['Azimuth [deg]'][0],len(groupdf['Azimuth [deg]'][0]))
    groupdf['Azimuth [deg]']=groupdf['Azimuth [deg]'].astype(float)  <- I get error here  

示例数据

   Tilt [deg] Azimuth [deg]  Glass SHGC  Area of Multiplied Openings [m2]  \
0        90.0        124.48        0.57                           1450.24   
1        90.0         207.3        0.57                            115.66   
2        90.0        207.47        0.57                            115.62   
3        90.0        208.25        0.57                             23.18   
4        90.0        208.26        0.57                            113.12   
5        90.0        214.48        0.57                            451.94   
6        90.0        218.57        0.57                            230.08   
7        90.0        304.46        0.57                             72.66   
8        90.0        304.48        0.57                           1827.53   
9        90.0         34.48        0.57                            917.29 

1 个答案:

答案 0 :(得分:2)

我认为您需要to_numeric参数errors='coerce'才能将非数字转换为NaN s:

groupdf['Azimuth [deg]']= pd.to_numeric(groupdf['Azimuth [deg]'], errors='coerce')

如果需要删除所有不可解析的列且数据中没有NaN个值,请使用boolean indexing并按notnull过滤:

groupdf = groupdf[pd.to_numeric(groupdf['Azimuth [deg]'], errors='coerce').notnull()]

在最新版本的pandas中,0.21.0可以使用Series.notna

groupdf = groupdf[pd.to_numeric(groupdf['Azimuth [deg]'], errors='coerce').notna()]