Pandas:导入多个数据帧,更改headers并将它们追加到循环中

Pandas: import multiple dataframes, change headers and append them in loop

我正在使用一个名为 ccxt 的库分析加密数据。 使用 ccxt,我可以轻松地将加密数据输入到数据框中的烛台:

import pandas as pd
import numpy
import config
import ccxt
import json
import csv

exchange = ccxt.binance({
    'enableRateLimit': True, 
    'options': {'defaultType': 'future'}
})

 
name = exchange.fetch_ohlcv('BTC/USDT', limit=5, timeframe='1m')
btc = pd.DataFrame(name, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
 
print(btc)


单个加密输出:

       timestamp      open      high       low     close   volume
0  1620202740000  54945.31  54987.01  54945.30  54978.49  118.239
1  1620202800000  54978.49  55054.00  54972.04  55027.12  337.619
2  1620202860000  55027.12  55041.05  54950.05  54951.96  131.414
3  1620202920000  54951.96  55067.36  54951.95  55063.78  176.529
4  1620202980000  55063.79  55064.00  55000.00  55014.39  107.082

我想使用 two-level headers 将多个密码导入一个数据帧,如下所示。

                      btc       btc        btc     btc     btc      eth        eth       eth      eth     eth                      
       timestamp     open      high       low     close   volume    open      high       low     close    volume  
0  1620202740000  54945.31  54987.01  54945.30  54978.49  118.239  54945.31  54987.01  54945.30  54978.49  4345
1  1620202800000  54978.49  55054.00  54972.04  55027.12  337.619  54945.31  54987.01  54945.30  54978.49  134.239   
2  1620202860000  55027.12  55041.05  54950.05  54951.96  131.414  54945.31  54987.01  54945.30  54978.49  14358.239
3  1620202920000  54951.96  55067.36  54951.95  55063.78  176.529  54945.31  54987.01  54945.30  54978.49  1148.239
4  1620202980000  55063.79  55064.00  55000.00  55014.39  107.082  54945.31  54987.01  54945.30  54978.49  18.239

这样我可以同时为多个加密创建列,例如

for x in ['btc', 'eth']:
    df.loc[:, (x, 'fast_ema_1min')] = df[x]['close'].rolling(window=1).mean()
    df.loc[:, (x, 'slow_ema_20min')] = df[x]['close'].rolling(window=20).mean()

我试过了

basket = [['BTC', 'BTC/USDT'], ['ETH', 'ETH/USDT'], ['ADA', 'ADA/USDT']]
appended_data = []
for i, name in basket:
    i = exchange.fetch_ohlcv(name, limit=5, timeframe='1m')
    i = pd.DataFrame(i, columns=[['_', name, name, name, name,name], ['timestamp', 'open', 'high', 'low', 'close', 'volume']])
    appended_data.append(i)
    print(appended_data)
print(appended_data.head(5)) 

但是,我得到了错误

AttributeError: 'list' object has no attribute 'head'

有人可以建议吗?谢谢。

您可以尝试保留聚合数据帧列表的代码,然后在循环后连接它们,如下所示:

pd.concat(appended_data, axis=1, ignore_index=True)

感谢@SeaBean

我设法解决了问题。

appended_data = []
 
basket = [['BTC', 'BTC/USDT'], ['ETH', 'ETH/USDT'], ['ADA', 'ADA/USDT']]
for i, name in basket:
    i = exchange.fetch_ohlcv(name, limit=5, timeframe='1m')
    i = pd.DataFrame(i, columns=[['_', name, name, name, name,name], ['timestamp', 'open', 'high', 'low', 'close', 'volume']])
    appended_data.append(i)
    df = pd.concat(appended_data, axis=1, ignore_index=True)