2016-06-30 10 views
3

私はデータベースにクエリを行い、結果をデータフレームとして保存し、それをfactorizepivot_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
try: 
    df1 = df.pivot_table(index='name', columns='name', values=['sale', 'year']) 
except pd.core.groupby.DataError: 
    df1 = pd.DataFrame() 
except: 
    raise 

クレジットを呼び出す前に

if df.empty: 
    return df 

空であるかどうかを確認する必要があります How can I catch a pandas DataError?

0

おそらく、データフレームがdataerrorのエラー名を見つけた人brenbarnするpivot_table

関連する問題