Automatically reduce the memory size of any pandas dataframe based on downcasting bit types efficiently