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)
我正在使用一个名为 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)