code: def save_asset_data(folder, df, decimals=8):
      symbols = df.index.get_level_values("symbol")
      for symbol in symbols:
          symbol_df = df.loc[(symbols == symbol)]  # Type: pd.DataFrame
  
          filename = os.path.join(folder, "{}.csv".format(symbol))
          if os.path.exists(filename):
              print_headers = False
  
          else:
              print_headers = True
  
          with open(filename, "a") as f:
              symbol_df.to_csv(
                  path_or_buf=f,
                  header=print_headers,
                  float_format="%.{}f".format(decimals),
              )
  
imports: import hashlib
  import json
  import os
  import pickle
  import shutil
  from datetime import date, datetime
  import pandas
  from catalyst.assets._assets import TradingPair
  from six import string_types
  from six.moves.urllib import request
  from catalyst.constants import DATE_FORMAT, SYMBOLS_URL
  from catalyst.exchange.exchange_errors import ExchangeSymbolsNotFound
  from catalyst.exchange.utils.serialization_utils import ExchangeJSONEncoder, ExchangeJSONDecoder
  from catalyst.utils.memoize import weak_lru_cache
  from catalyst.utils.paths import data_root, ensure_directory, last_modified_time
label_desc: Use image node_id 30 for calling a global function with example usage: save_asset_data(folder, df, decimals) without return types