我查询数据库并将结果保存为数据框,然后由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
答案 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.empty
或 len(df.index) == 0