将数据框行值设置为numpy数组值

时间:2019-11-04 03:37:41

标签: python pandas dataframe

原始帖子的编辑版本

我有一个完全用NaN填充的数据框。具体来说:

print(histPrice['Allocation %'])

[Output]: 
 Symbols    SPY  GLD  TLT   MA   QQQ      TIP
Date                                         
2019-11-01  NaN  NaN  NaN   NaN  NaN      NaN
2019-10-31  NaN  NaN  NaN   NaN  NaN      NaN
2019-10-30  NaN  NaN  NaN   NaN  NaN      NaN
2019-10-29  NaN  NaN  NaN   NaN  NaN      NaN
2019-10-28  NaN  NaN  NaN   NaN  NaN      NaN
2019-10-25  NaN  NaN  NaN   NaN  NaN      NaN
2019-10-24  NaN  NaN  NaN   NaN  NaN      NaN
2019-10-23  NaN  NaN  NaN   NaN  NaN      NaN
2019-10-22  NaN  NaN  NaN   NaN  NaN      NaN
2019-10-21  NaN  NaN  NaN   NaN  NaN      NaN
2019-10-18  NaN  NaN  NaN   NaN  NaN      NaN

我有以下numpy数组:

x = np.array([0.1,0.3,0.2,0.1,0.1,0.2])

我尝试通过以下方式将数组分配给2019-10-30行:

histPrice['Allocation %'].iloc[2] = x 

以及

histPrice['Allocation %'].iloc[2,:] = x

但是,两者都导致:

print(histPrice['Allocation %'].iloc[2])

[Output]: 
 Symbols
SPY       NaN
GLD       NaN
TLT       NaN
MA        NaN
QQQ       NaN
TIP       NaN
Name: 2019-10-30 00:00:00, dtype: float64 

我对为什么它仍然输出NaN感到困惑。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

您应该

.reduce

答案 1 :(得分:0)

如果要使用numpy数组更新整行,则应该可以使用:

x = np.array([2,3,1])
df.iloc[2]= x

        Stock Bond Gold
2/01/19   NaN  NaN  NaN
1/31/19   NaN  NaN  NaN
1/30/19     2    3    1
1/29/19   NaN  NaN  NaN

这将使用数组的每个值更新行,而不仅仅是第一个值。

我很好奇这是否对您有用?

import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['Stock','Bond','Gold'], index=['2/01/19','1/31/19','1/30/19','1/29/19'])
histPrice = {}
histPrice['Allocation %'] = df
x = np.array([2,3,1])
histPrice['Allocation %'].iloc[2] = x 
print(histPrice['Allocation %'].iloc[2])

答案 2 :(得分:0)

根据说明,您正在将一个数据帧存储在另一个单行数据帧中。

在进行以下操作时,您正在数据框的副本中设置一个值。

histPrice['Allocation %'].iloc[2] = x 

相反,请尝试:(您可以将0替换为索引)

histPrice.loc[0, 'Allocation %'].iloc[2] = x