首页 > 解决方案 > 从数组字典创建 DataFrame

问题描述

我对 Python 很陌生,在 Pyhton 中将字典转换为 DataFrame 时遇到了困难。我的字典包含不同股票在不同日期上涨的概率。当我尝试将其转换为 DataFrame 时,股票名称被视为列名,这正是我想要的方式。我的问题是,所有值都出现在每列的第一行。

这基本上是我尝试使用的代码:

一开始我有一个这样的股票样本:

stocks = ['MSFT', 'AAPL', 'AMZN']

为了获得向上运动的概率,我使用了以下代码:

proba = {stock: clf[stock].predict_proba(X_test[stock]) for stock in stocks}

print(proba)

给我以下输出:

{'MSFT': array([[0.30994211],
   [0.15608782],
   [0.15608782],
   [0.16334815],
   [0.14721092],
   [0.29563944],
   [0.16334815],
   [0.24821587],
   [0.43182074],
   [0.30994211],
   [0.28825953],
   .
   .
   .
   [0.34160564]]), 'AAPL': array([[0.48241034],
   [0.47819121],
   [0.48937013],
   [0.49798732],
   [0.50132104],
   .
   .
   . 
   [0.03298367]]), 'AMZN': array([[0.51179782],
   [0.64532595],
   [0.56331474],
   [0.66499856],
   [0.55492011],
   [0.4623048 ],
   [0.4536123 ],
   [0.4613901 ],
   [0.39305493],
   [0.44297254],
   .
   .
   .])}

我现在的目标是将此字典转换为如下所示的 DataFrame:

    MSFT    AAPL    AMZN
0   0.875   0.983   0.276
1   0.345   0.765   0.342
2   0.654   0.444   0.874  
    ...     ...     ...
    ...     ...     ...

最后,DataFrame 应该有 280 行和 3 列。

这是一个可以使用的小样本:

proba = {stock: clf[stock].predict_proba(X_test[stock]) for stock in stocks}
proba = {stock: np.delete(proba[stock], 0, axis=1) for stock in stocks}
print(proba)

结果是:

{'MSFT': array([[0.49784439],
   [0.51812552],
   [0.35948374]]), 'AAPL': array([[0.29038393],
   [0.58038393],
   [0.52032512]]), 'AMZN': array([[0.64295894],
   [0.54295894],
   [0.39719920]])}

这些数组应转换为一个如下所示的 DataFrame:

     MSFT         AAPL         AMZN
0    0.49784439   0.29038393   0.64295894
1    0.51812552   0.58038393   0.54295894
2    0.35948374   0.52032512   0.39719920

希望编辑使它更清晰一些。

标签: pythonarraysdataframedictionary

解决方案


# Convert list of lists into list
for key in res.keys():
     res[key] = [x for sublist in res[key] for x in sublist]

# Read dictionary into DataFrame
df = pd.DataFrame.from_dict(res)

您必须先将列表列表转换为单个列表,然后再将其转换为 DataFrame。


推荐阅读