原始帖子的编辑版本
我有一个完全用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感到困惑。任何帮助将不胜感激。
答案 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