嵌套字典到熊猫

时间:2021-05-17 15:26:56

标签: python pandas

我正在努力将我的嵌套字典(由 for 循环创建)放入 Pandas。

list_of_instruments = ["Gold", "Nasdaq", "Dow Jones", "SP500"]
instruments = {}
for instrument in list_of_instruments:
    instruments[instrument] = {'ig_name': "", 'latest_close': 0, 'latest_close_date': 0, 'intraday_bid': 0}

df = pd.DataFrame(instruments).T
print(df)

给我以下内容

          ig_name latest_close latest_close_date intraday_bid
OMXS30                       0                 0            0
Nasdaq                       0                 0            0
Dow Jones                    0                 0            0
SP500                        0                 0            0

这基本上就是我想要的,第一列没有命名的小问题。我已经尝试了几种不同的解决方案,但无法想出一些有效的方法。而是肯定有一个比较简单的解决方案(这并不像我对“.T”所做的那样涉及转置数据帧)。我似乎无法理解。

有什么想法或建议吗?

4 个答案:

答案 0 :(得分:1)

因为那是 index。 您可以将 index name 设置为:df.index.name = 'Index Column'

输出

             ig_name latest_close latest_close_date intraday_bid
Index Column                                                    
Gold                            0                 0            0
Nasdaq                          0                 0            0
Dow Jones                       0                 0            0
SP500                           0                 0            0

或者,如果您愿意,您可以将第一列作为基于整数索引的单独列:

df.reset_index().rename(columns={'index':'Index Column'})

输出

  Index Column ig_name latest_close latest_close_date intraday_bid
0         Gold                    0                 0            0
1       Nasdaq                    0                 0            0
2    Dow Jones                    0                 0            0
3        SP500                    0                 0            0

答案 1 :(得分:1)

第一列如你所说,不是一个,是index,你可以命名,或者将索引设置为数字,你的乐器名称就变成了像其他人一样的真实专栏

  • 设置索引名称

    df = pd.DataFrame(instruments).T
    df.index.name = 'instrument'
    
               ig_name latest_close latest_close_date intraday_bid
    instrument
    Gold                          0                 0            0
    Nasdaq                        0                 0            0
    Dow Jones                     0                 0            0
    SP500                         0                 0            0
    
  • 从索引中删除

    df = pd.DataFrame(instruments).T.reset_index().rename(columns={'index': 'instrument'})
    
      instrument ig_name latest_close latest_close_date intraday_bid
    0       Gold                    0                 0            0
    1     Nasdaq                    0                 0            0
    2  Dow Jones                    0                 0            0
    3      SP500                    0                 0            0
    

或者以不同的方式构建您的数据

instruments = [
    {'instrument': i, 'ig_name': "", 'latest_close': 0, 'latest_close_date': 0, 'intraday_bid': 0}
    for i in list_of_instruments
]

df = pd.DataFrame(instruments)

  instrument ig_name  latest_close  latest_close_date  intraday_bid
0       Gold                     0                  0             0
1     Nasdaq                     0                  0             0
2  Dow Jones                     0                  0             0
3      SP500                     0                  0             0

答案 2 :(得分:1)

我认为您可以使用此代码来完成。

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

答案 3 :(得分:1)

import pandas as pd
import numpy as np

list_of_instruments = ["Gold", "Nasdaq", "Dow Jones", "SP500"]
n = len(list_of_instruments)

df = pd.DataFrame({'ig_name': list_of_instruments, 
                   'latest_close': np.zeros(n), 
                   'latest_close_date': np.zeros(n), 
                   'intraday_bid': np.zeros(n)})
print(df)

您将 index 用作 list_of_instruments,这似乎不是您想要的。