首页 > 解决方案 > 多个变量循环并附加数据框

问题描述

我正在尝试遍历 2 个列表以在下面的循环中获得所有可能的组合。我很难理解为什么第一部分有效而第二部分无效。基本上它查询相同的数据,但使用列表中的所有模式。任何帮助将不胜感激。

编码:

base = ['BTC', 'ETH']
quoted = ['USDT', 'AUD','USD']

def daily_volume_historical(symbol, comparison_symbol, all_data=False, limit=90, aggregate=1, exchange=''):
url = 'https://min-api.cryptocompare.com/data/histoday?fsym={}&tsym={}&limit={}&aggregate={}'\
        .format(symbol.upper(), comparison_symbol.upper(), limit, aggregate)
if exchange:
    url += '&e={}'.format(exchange)
if all_data:
    url += '&allData=true'
page = requests.get(url)
data = page.json()['Data']
df = pd.DataFrame(data)
df.drop(df.index[-1], inplace=True)
df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
df.set_index('timestamp')
return df

## THIS CODE GIVES SOME DATA ##
volu = daily_volume_historical('BTC', 'USD', 'CCCAGG').set_index('timestamp').volumefrom

## THIS CODE GIVES EMPTY DATA FRAME ##
d_volu = [] 
for a,b in [(a,b) for a in base for b in quoted]:
  volu = daily_volume_historical(a, b, exchange= 'CCCAGG').volumefrom
  d_volu.append
d_volu = pd.concat(d_volu, axis=1)

volu输出样本:

timestamp
2010-07-17 09:00:00        20.00
2010-07-18 09:00:00        75.01
2010-07-19 09:00:00       574.00
2010-07-20 09:00:00       262.00
2010-07-21 09:00:00       575.00
2010-07-22 09:00:00      2160.00
2010-07-23 09:00:00      2402.50
2010-07-24 09:00:00       496.32

标签: pythonpandasloops

解决方案


import itertools

base = ['BTC', 'ETH']
quoted = ['USDT', 'AUD','USD']

combinations = list(itertools.product(base, quoted))

def daily_volume_historical(symbol, comparison_symbol, all_data=False,     limit=90, aggregate=1, exchange=''):
    url = 'https://min-api.cryptocompare.com/data/histoday?fsym={}&tsym={}&limit={}&aggregate={}'\
    .format(symbol.upper(), comparison_symbol.upper(), limit, aggregate)
if exchange:
    url += '&e={}'.format(exchange)
if all_data:
    url += '&allData=true'
page = requests.get(url)
data = page.json()['Data']
df = pd.DataFrame(data)
df.drop(df.index[-1], inplace=True)
df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
df.set_index('timestamp')
return df

## THIS CODE GIVES SOME DATA ##
volu = daily_volume_historical('BTC', 'USD',     'CCCAGG').set_index('timestamp').volumefrom

## THIS CODE GIVES EMPTY DATA FRAME ##
d_volu = [] 
for a,b in combinations:
volu = daily_volume_historical(a, b, exchange= 'CCCAGG').volumefrom
d_volu.append
d_volu = pd.concat(d_volu, axis=1)

推荐阅读