仅获取字典中嵌套列表的一个值以创建数据框更新#1

饼干弗兰克

我正在使用一个API,该API返回一个带有嵌套列表的字典,让其命名为coins_best结果如下所示:

{'bitcoin': [[1603782192402, 13089.646908288987],
  [1603865643028, 13712.070136258053]],
 'ethereum': [[1603782053064, 393.6741989091851],
  [1603865024078, 404.86117057956386]]}

列表中的第一个值是时间戳记,而第二个是美元价格。我想创建一个具有价格并将时间戳记作为索引的DataFrame。我尝试使用此代码仅一步来完成它:

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

这种尝试给了我一个只有一列而不是必需的两列的DataFrame,因为columns当我尝试使用参数抛出错误时(必须使用某种类型的集合调用TypeError:Index(...),传递了“ bitcoin”)与id

然后,我尝试着对字典及其列表进行预处理:

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

您是否知道在创建DataFrame之前如何处理字典以便获得此结果?

是我的第一个问题,我试图尽可能清楚。非常感谢你。

更新#1

Sander van den Oord的答案也解决了时间戳问题,对于解决此问题很有用。但是,示例代码正确无误(因为它使用了提供的信息)仅限于这两个键。这是解决字典中每个键问题的最终代码。

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()

非常感谢您的回答。

桑德·范·登·奥尔德

我认为您不应该忽略在不同时间获取硬币价值的事实。您可以执行以下操作:

import pandas as pd
import hvplot.pandas

coins_best = {
    'bitcoin': [[1603782192402, 13089.646908288987],
               [1603865643028, 13712.070136258053]],
   'ethereum': [[1603782053064, 393.6741989091851],
               [1603865024078, 404.86117057956386]],
}

df_bitcoin = pd.DataFrame(data=coins_best['bitcoin'], columns=['timestamp', 'bitcoin'])
df_bitcoin['timestamp'] = pd.to_datetime(df_bitcoin['timestamp'], unit='ms')


df_ethereum = pd.DataFrame(data=coins_best['ethereum'], columns=['timestamp', 'ethereum'])
df_ethereum['timestamp'] = pd.to_datetime(df_ethereum['timestamp'], unit='ms')

df_coins = pd.concat([df_ethereum, df_bitcoin], sort=False)

df_coins现在将如下所示:

+----+----------------------------+------------+-----------+
|    | timestamp                  |   ethereum |   bitcoin |
|----+----------------------------+------------+-----------|
|  0 | 2020-10-27 07:00:53.064000 |    393.674 |     nan   |
|  1 | 2020-10-28 06:03:44.078000 |    404.861 |     nan   |
|  0 | 2020-10-27 07:03:12.402000 |    nan     |   13089.6 |
|  1 | 2020-10-28 06:14:03.028000 |    nan     |   13712.1 |
+----+----------------------------+------------+-----------+

现在,如果您希望值位于同一行,则可以使用重采样,这里我每天都这样做:硬币类型在同一天的所有值均取平均值:

df_coins_resampled = df_coins.set_index('timestamp').resample('d').mean()

df_coins_resampled 看起来像这样:

+---------------------+------------+-----------+
| timestamp           |   ethereum |   bitcoin |
|---------------------+------------+-----------|
| 2020-10-27 00:00:00 |    393.674 |   13089.6 |
| 2020-10-28 00:00:00 |    404.861 |   13712.1 |
+---------------------+------------+-----------+

我喜欢使用hvplot获取结果的交互式图:

df_coins_resampled.hvplot.scatter(
    x='timestamp', 
    y=['bitcoin', 'ethereum'], 
    s=20, padding=0.1
)

结果图: 随着时间的推移绘制比特币

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从Python出现的键列表中获取字典中的第一个值

从一个文件中读取字典并使用 python 从熊猫创建一个 excel(数据框)l

创建一个嵌套字典,其中内部值是列表

从列表字典创建一个熊猫数据框

从字典中的值列表中获取一个值

从熊猫数据框中获取随机样本,但每个值仅获取一个

从一个数据框中查找值以创建从其他的字典

获取字典列表中字典的值

如何从字典中创建一个pydatatable数据框,该字典的键之间的值不相等?

熊猫:从字典列表创建一个数据框,其中所有值都是numpy数组?

使用一个数据框列中的键和另一个数据框列中的值创建字典

获取字典中嵌套键的值

从列表要塞中的嵌套字典中获取键和值到数据框

当每个字典的一个条目本身就是一个数组时,从词典列表中创建一个python pandas数据框

根据另一个数据框中的值在数据框中创建列表列

根据数据框中的ID创建一个列表

创建字典列表,每一步仅修改一个值

熊猫从嵌套的字典创建一个单行数据框

从数据框中创建一个字典,第一列作为键,其余作为值

创建一个包含字典的列表,这些字典的值是从不同的列表中依次选择的

Python从另一个字典列表更新字典列表中的值

从 Python 字典创建一个 Pandas 数据框。Python 字典有多个键,它的值有字符串和列表数据类型

仅访问字典的嵌套列表中的一个键,并使用matplotlib对其进行绘制

根据熊猫数据框中的另一个列表创建一个列表

无法从列表中获取字典值

从键列表中获取字典的值

python在列表中获取字典值

根据 Pandas 数据框中的列值创建嵌套字典?

根据另一个列表 R 中的数据框列创建数据框列表