【问题标题】:Appending error from dictionary to Dataframe将错误从字典附加到数据框
【发布时间】:2021-07-06 20:10:46
【问题描述】:

我正在尝试将字典中的数据提取到 df 中,最后提取到 CSV 中,我需要填充行。在从 API 获取数据时,“res”每隔一秒就会更改一次。

这是我尝试过的:

for x in range(0,5):
  df1 = df1.append({'bidsize':res["Bids"][x]["Size"]}, ignore_index= True)
  df1 = df1.append({'bidprice':res["Bids"][x]["Price"]}, ignore_index= True)
  df1 = df1.append({'bid_to':res["Bids"][x]["TotalOrders"]}, ignore_index= True)
  df1 = df1.append({'bid_buyback':res["Bids"][x]["BuyBackMarketMaker"]}, ignore_index= True)
  df1 = df1.append({'asksize':res["Asks"][x]["Size"]}, ignore_index= True)
  df1 = df1.append({'askprice':res["Asks"][x]["Price"]}, ignore_index= True)
  df1 = df1.append({'ask_to':res["Asks"][x]["TotalOrders"]}, ignore_index= True)
  df1 = df1.append({'ask_buyback':res["Asks"][x]["BuyBackMarketMaker"]}, ignore_index= True)
print(df1)

它给出:

    bidsize  bidprice  bid_to  bid_buyback  asksize  askprice  ask_to  ask_buyback
0    1044.0       NaN     NaN          NaN      NaN       NaN     NaN          NaN
1       NaN   2142.00     NaN          NaN      NaN       NaN     NaN          NaN
2       NaN       NaN     8.0          NaN      NaN       NaN     NaN          NaN
3       NaN       NaN     NaN          0.0      NaN       NaN     NaN          NaN
4       NaN       NaN     NaN          NaN    247.0       NaN     NaN          NaN
5       NaN       NaN     NaN          NaN      NaN   2142.50     NaN          NaN
6       NaN       NaN     NaN          NaN      NaN       NaN     2.0          NaN
7       NaN       NaN     NaN          NaN      NaN       NaN     NaN          0.0
8       2.0       NaN     NaN          NaN      NaN       NaN     NaN          NaN
9       NaN   2141.90     NaN          NaN      NaN       NaN     NaN          NaN
10      NaN       NaN     2.0          NaN      NaN       NaN     NaN          NaN
11      NaN       NaN     NaN          0.0      NaN       NaN     NaN          NaN
12      NaN       NaN     NaN          NaN      8.0       NaN     NaN          NaN
13      NaN       NaN     NaN          NaN      NaN   2142.70     NaN          NaN
14      NaN       NaN     NaN          NaN      NaN       NaN     1.0          NaN
15      NaN       NaN     NaN          NaN      NaN       NaN     NaN          0.0
16     47.0       NaN     NaN          NaN      NaN       NaN     NaN          NaN
17      NaN   2141.85     NaN          NaN      NaN       NaN     NaN          NaN
18      NaN       NaN     1.0          NaN      NaN       NaN     NaN          NaN
19      NaN       NaN     NaN          0.0      NaN       NaN     NaN          NaN
20      NaN       NaN     NaN          NaN    495.0       NaN     NaN          NaN
21      NaN       NaN     NaN          NaN      NaN   2142.75     NaN          NaN
22      NaN       NaN     NaN          NaN      NaN       NaN     2.0          NaN
23      NaN       NaN     NaN          NaN      NaN       NaN     NaN          0.0
24    313.0       NaN     NaN          NaN      NaN       NaN     NaN          NaN
25      NaN   2141.80     NaN          NaN      NaN       NaN     NaN          NaN
26      NaN       NaN     3.0          NaN      NaN       NaN     NaN          NaN
27      NaN       NaN     NaN          0.0      NaN       NaN     NaN          NaN
28      NaN       NaN     NaN          NaN    239.0       NaN     NaN          NaN
29      NaN       NaN     NaN          NaN      NaN   2142.80     NaN          NaN
30      NaN       NaN     NaN          NaN      NaN       NaN     1.0          NaN
31      NaN       NaN     NaN          NaN      NaN       NaN     NaN          0.0
32     47.0       NaN     NaN          NaN      NaN       NaN     NaN          NaN
33      NaN   2141.75     NaN          NaN      NaN       NaN     NaN          NaN
34      NaN       NaN     1.0          NaN      NaN       NaN     NaN          NaN
35      NaN       NaN     NaN          0.0      NaN       NaN     NaN          NaN
36      NaN       NaN     NaN          NaN    860.0       NaN     NaN          NaN
37      NaN       NaN     NaN          NaN      NaN   2142.90     NaN          NaN
38      NaN       NaN     NaN          NaN      NaN       NaN     5.0          NaN
39      NaN       NaN     NaN          NaN      NaN       NaN     NaN          0.0

我希望它简洁成 5 行而不是 40 行。

我正在使用的字典中的示例数据如下所示:

"Bids":[{"Size":21,"Price":1999.15,"TotalOrders":2,"BuyBackMarketMaker":0},
{"Size":20,"Price":1999.1,"TotalOrders":1,"BuyBackMarketMaker":0},
{"Size":40,"Price":1999.05,"TotalOrders":1,"BuyBackMarketMaker":0},
{"Size":185,"Price":1999,"TotalOrders":6,"BuyBackMarketMaker":0},
{"Size":7,"Price":1998.8,"TotalOrders":2,"BuyBackMarketMaker":0}],
"Asks":[{"Size":1,"Price":1999.8,"TotalOrders":1,"BuyBackMarketMaker":0},
{"Size":3,"Price":1999.85,"TotalOrders":1,"BuyBackMarketMaker":0},
{"Size":34,"Price":1999.9,"TotalOrders":2,"BuyBackMarketMaker":0},
{"Size":199,"Price":2000,"TotalOrders":10,"BuyBackMarketMaker":0},
{"Size":1,"Price":2000.05,"TotalOrders":1,"BuyBackMarketMaker":0}]

请建议一个优化的代码。

【问题讨论】:

    标签: python pandas dataframe dictionary


    【解决方案1】:

    使用concatDataFrame 构造函数,对于新列名称使用rename

    rename = {'TotalOrders':'_to','BuyBackMarketMaker':'_buyback'}
    df = pd.concat([pd.DataFrame(d['Bids']).rename(columns=rename).add_prefix('bid'), 
                    pd.DataFrame(d['Asks']).rename(columns=rename).add_prefix('ask')], axis=1)
    
    print (df)
       bidSize  bidPrice  bid_to  bid_buyback  askSize  askPrice  ask_to  \
    0       21   1999.15       2            0        1   1999.80       1   
    1       20   1999.10       1            0        3   1999.85       1   
    2       40   1999.05       1            0       34   1999.90       2   
    3      185   1999.00       6            0      199   2000.00      10   
    4        7   1998.80       2            0        1   2000.05       1   
    
       ask_buyback  
    0            0  
    1            0  
    2            0  
    3            0  
    4            0  
    

    【讨论】:

    猜你喜欢
    • 2019-01-17
    • 2023-02-25
    • 2022-01-06
    • 2015-10-20
    • 2021-11-07
    • 2016-06-11
    • 2017-10-12
    • 2020-09-23
    • 2023-02-24
    相关资源
    最近更新 更多