捕获异常并返回空数据帧

时间:2016-06-30 11:58:42

标签: python pandas

我查询数据库并将结果保存为数据框,然后由factorize转换为pivot_table。这在数据库查询返回数据时工作正常但在没有返回数据时抛出错误(这是预期的)。如何捕获此异常并返回空数据帧?

#When dataframe is non-empty, transformation works fine:
print df

   sale name  year
0   41  Jason  2012
1   24  Molly  2012
2   31  Jason  2013
3   32  Jason  2014
4   31  Molly  2014


df['groups'] = (pd.factorize(df.year)[0] + 1).astype(str)

df1 = (df.pivot_table(index='name', columns='groups', values=['sale', 'year']))
df1.columns = [''.join(col) for col in df1.columns]
print (df1)

       sale1  sale2  sale3   year1   year2   year3
name                                              
Jason   41.0   31.0   32.0  2012.0  2013.0  2014.0
Molly   24.0    NaN   31.0  2012.0     NaN  2014.0

#But when dataframe is empty, factorize by pivot_table throws error

df  = pd.DataFrame(columns=['sales','name','year'])
df1 = (df.pivot_table(index='name', columns='groups', values=['sale', 'year']))
df1.columns = [''.join(col) for col in df1.columns]
print (df1)

DataError: No numeric types to aggregate

3 个答案:

答案 0 :(得分:4)

try:
    df1 = df.pivot_table(index='name', columns='name', values=['sale', 'year'])
except pd.core.groupby.DataError:
    df1 = pd.DataFrame()
except:
    raise

致brenbarn的信用,他们在How can I catch a pandas DataError?

找到了dataerror的错误名称

答案 1 :(得分:0)

您应该检查数据帧是否为空

if df.empty:
    return df

在致电pivot_table

之前

答案 2 :(得分:0)

避免使用 const MyApp = () => { let outTag = null; if (var1 && var2) { outTag = <tag1 />; } else if (error) { outTag = <Tag2 />; } return ( <> {outTag} </>); }

检查 Dask DataFrame 是否有任何行可能很昂贵。 但是,检查列数很快。根据您需要这些结果中的哪一个,使用 df.emptylen(df.index) == 0