4 回答

TA貢獻1943條經驗 獲得超7個贊
使用numpy.hstack向數組添加一個值:1d
df1 = pd.DataFrame({'a': range(6)})
arr1 = np.arange(15).reshape(5,3)
print (arr1)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]]
df1['aaa'] = np.hstack((np.nan, arr1[:,0]))
print (df1)
a aaa
0 0 NaN
1 1 0.0
2 2 3.0
3 3 6.0
4 4 9.0
5 5 12.0
如果可能,另一個想法是使用具有索引的構造函數:DataFrameSeriesdf1.index
df1 = pd.DataFrame({'a': range(6)}, index=list('abcdef'))
arr1 = np.arange(15).reshape(5,3)
print (arr1)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]]
dif = df1.shape[0] - arr1.shape[0]
df1['aaa'] = pd.Series(arr1[:,0], index=df1.index[dif:])
print (df1)
a aaa
a 0 NaN
b 1 0.0
c 2 3.0
d 3 6.0
e 4 9.0
f 5 12.0
最后位置:
dif = df1.shape[0] - arr1.shape[0]
df1['aaa'] = pd.Series(arr1[:,0], index=df1.index[:-dif])
print (df1)
a aaa
a 0 0.0
b 1 3.0
c 2 6.0
d 3 9.0
e 4 12.0
f 5 NaN
編輯:
arr1 = np.arange(15).reshape(5,3)
df1 = pd.DataFrame({'a': range(6)})
如果選擇只得到帶有形狀的數組,那么就有必要 numpy.hstack:01d(6,)
a = np.hstack((np.nan, arr1[:,0]))
print (a)
[nan 0. 3. 6. 9. 12.]
print (a.shape)
(6,)
df1['aaa'] = a
如果通過獲取具有形狀的尺寸的數組來選擇,則可以使用numpy.vstack:[0]2dMxN(6,1)
a1 = np.vstack((np.nan, arr1[:,[0]]))
print (a1)
[[nan]
[ 0.]
[ 3.]
[ 6.]
[ 9.]
[12.]]
print (a1.shape)
(6, 1)
df1['aaa1'] = a1
print (df1)
a aaa aaa1
0 0 NaN NaN
1 1 0.0 0.0
2 2 3.0 3.0
3 3 6.0 6.0
4 4 9.0 9.0
5 5 12.0 12.0

TA貢獻1818條經驗 獲得超8個贊
雖然我可以看到其他幾個答案,但沒有一個真正解決了手頭的問題。直觀地說,你的方法是可以的;您正在列數組上垂直堆疊。nan
df1['aaa'] = np.vstack((np.nan, arr1[:,0]))
它應該工作,但它沒有。這里的小問題是搜索列維度。 具有形狀 ;它沒有第二個維度。簡單地重塑它將使工作正常。vstack
arr1[:,0]
(1412, )
(1412,1)
vstack
df1['aaa'] = np.vstack((np.nan, arr1[:,0].reshape(-1,1)))

TA貢獻1811條經驗 獲得超5個贊
你可以這樣做,這里有結果。添加列,第一行是 NaN:
df['aaa'] = pd.Series(ar1[:,0])
ea = np.empty(df.shape[1]).fill(np.nan)
df.loc[-1] = ea
df.index = df.index + 1
df = df.reset_index(drop=True).sort_values(by=['aaa'], na_position='first')
這是您的數據框架:
c1 c2 c3
0 1 2 3
1 10 20 30
下面是數組:
[[ 5 55]
[ 50 550]]
結果是這樣的:
c1 c2 c3 aaa
2 NaN NaN NaN NaN
0 1.0 2.0 3.0 5.0
1 10.0 20.0 30.0 50.0
添加回答
舉報