我正在使用一个API,它返回一个包含嵌套列表的字典,让我们将其命名为coins_best
。结果如下所示:
{'bitcoin': [[1603782192402, 13089.646908288987],
[1603865643028, 13712.070136258053]],
'ethereum': [[1603782053064, 393.6741989091851],
[1603865024078, 404.86117057956386]]}
列表中的第一个值是时间戳,而第二个值是美元价格。我想创建一个带有价格和时间戳作为索引的数据框。我尝试使用此代码只需一步:
d = pd.DataFrame()
for id, obj in coins_best.items():
for i in range(0,len(obj)):
temp = pd.DataFrame({
obj[i][1]
}
)
d = pd.concat([d, temp])
d
这次尝试给了我一个只有一列的数据帧,而不是所需的两列,因为当我尝试使用columns
时,使用columns
参数会抛出错误(TypeError:Index(…)必须用某种集合调用,'bitcoin'被传递)
然后我试着用理解来预处理字典和它们的列表:
for k in coins_best.keys():
inner_lists = (coins_best[k] for inner_dict in coins_best.values())
items = (item[1] for ls in inner_lists for item in ls)
我在字典里找不到这两个元素,只有最后一个
我知道可以尝试:
df = pd.DataFrame(coins_best, columns=coins_best.keys())
这给了我:
bitcoin ethereum
0 [1603782192402, 13089.646908288987] [1603782053064, 393.6741989091851]
1 [1603785693143, 13146.275972229188] [1603785731599, 394.6174435303511]
然后尝试删除每行列表中的第一个元素,但对我来说更难。所需的答案是:
bitcoin ethereum
1603782192402 13089.646908288987 393.6741989091851
1603785693143 13146.275972229188 394.6174435303511
您知道如何在创建数据帧之前处理字典以获得此结果吗
这是我的第一个问题,我尽量说清楚。多谢各位
更新#1
{a1}的答案也解决了时间戳的问题,并且对它的用途很有用。但是,示例代码虽然正确(因为它使用了提供的信息),但仅限于这两个键。这是解决字典中每个键问题的最终代码
for k in coins_best:
df_coins1 = pd.DataFrame(data=coins_best[k], columns=['timestamp', k])
df_coins1['timestamp'] = pd.to_datetime(df_coins1['timestamp'], unit='ms')
df_coins = pd.concat([df_coins1, df_coins], sort=False)
df_coins_resampled = df_coins.set_index('timestamp').resample('d').mean()
非常感谢你的回答
我认为你不应该忽视这样一个事实,即硬币的价值是在不同的时间计算的。你可以这样做:
您的
df_coins
现在将如下所示:现在,如果希望值在同一行上,可以使用resampling,这里我每天都这样做:一种硬币类型的同一天的所有值都是平均值:
df_coins_resampled
将如下所示:我喜欢使用hvplot获得结果的交互式绘图:
结果图:
有不同的时间戳,因此正确的输出看起来与您提供的不同,但除此之外,它是一个单行线(其中d是您的输入字典):
相关问题 更多 >
编程相关推荐