首页 > 解决方案 > 从 API 查询列表对象并将其返回到数据框中 - 格式问题

问题描述

我有以下脚本,它根据 (i) 的引用以列表格式返回数据。我设置了一个空列表,然后使用 API 函数 get_kline_data 进行查询,并使用 .extend 函数将每个输出传递到我的 klines_list

klines_list = []
a = ["REQ-ETH","REQ-BTC","XLM-BTC"]
for i in a:
    klines = client.get_kline_data(i, '5min', 1619317366, 1619317606)
    klines_list.extend([i,klines])
klines_list 

klines_list 然后以这种格式返回数据;

['REQ-ETH',
 [['1619317500',
   '0.0000491',
   '0.0000491',
   '0.0000491',
   '0.0000491',
   '5.1147',
   '0.00025113177']],
 'REQ-BTC',
 [['1619317500',
   '0.00000219',
   '0.00000219',
   '0.00000219',
   '0.00000219',
   '19.8044',
   '0.000043371636']],
 'XLM-BTC',
 [['1619317500',
   '0.00000863',
   '0.00000861',
   '0.00000863',
   '0.00000861',
   '653.5693',
   '0.005629652673']]]

然后我尝试将其转换为数据框;

import pandas as py
df = py.DataFrame(klines_list)

这就是结果;

0
0   REQ-ETH
1   [[1619317500, 0.0000491, 0.0000491, 0.0000491,...
2   REQ-BTC
3   [[1619317500, 0.00000219, 0.00000219, 0.000002...
4   XLM-BTC
5   [[1619317500, 0.00000863, 0.00000861, 0.000008..

DF 的结构不正确,这似乎是由于我将列表放在一起的方式。

我想要与列表 a 中正确条目相对应的列中的定量数据,而不是行中的定量数据。此外,代码数据或列表 a,(“REQ-ETH/REQ-BTC”)等应位于单独的列中。什么是进行重组的好方法?

编辑:@Ynjxsjmh 这是遵循以下建议在 for 循环中附加字典时的输出

REQ-ETH REQ-BTC XLM-BTC
0   [1619317500, 0.0000491, 0.0000491, 0.0000491, ...   NaN NaN
1   NaN [1619317500, 0.00000219, 0.00000219, 0.0000021...   NaN
2   NaN NaN [1619317500, 0.00000863, 0.00000861, 0.0000086...

标签: pythonpandaslistdataframeappend

解决方案


pandas.DataFrame()可以接受一个字典。它将构造dict键作为列标题,将dict值构造为列值。

import pandas as pd

a = ["REQ-ETH","REQ-BTC","XLM-BTC"]

klines_data = {}

for i in a:
    klines = client.get_kline_data(i, '5min', 1619317366, 1619317606)
    klines_data[i] = klines[0]
    #                   ^
    #                   |
    #                   Add a key to klines_data

df = pd.DataFrame(klines_data)
print(df)

         REQ-ETH         REQ-BTC         XLM-BTC
0     1619317500      1619317500      1619317500
1      0.0000491      0.00000219      0.00000863
2      0.0000491      0.00000219      0.00000861
3      0.0000491      0.00000219      0.00000863
4      0.0000491      0.00000219      0.00000861
5         5.1147         19.8044        653.5693
6  0.00025113177  0.000043371636  0.005629652673

如果长度klines不相等,可以使用

df = pd.DataFrame.from_dict(klines_data, orient='index').T

推荐阅读