11

I query a database and save result as a dataframe which I then transform by factorize with pivot_table. This works fine when database query returns data but it throws an error when no data is returned(this is to be expected). How to catch this exception and return empty dataframe?

#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 Answers 3

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

Credits to brenbarn who found the error name for dataerror at How can I catch a pandas DataError?

Sign up to request clarification or add additional context in comments.

Comments

2

You should probably check whether the dataframe is empty or not

if df.empty:
    return df

before calling pivot_table

Comments

1

Avoid using df.empty

Checking whether a Dask DataFrame has any rows may be expensive. However, checking the number of columns is fast. Depending on which of these results you need, use either len(df.index) == 0 or len(df.columns) == 0

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.