Используйте 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
Другая идея, если возможно, не индекс по умолчанию DataFrame
, это использовать Series
конструктор с индексированием df1.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)})
Если выбрать 0
только получить 1d
массив с формой (6,)
, поэтому необходимо numpy.hstack
:
a = np.hstack((np.nan, arr1[:,0]))
print (a)
[nan 0. 3. 6. 9. 12.]
print (a.shape)
(6,)
df1['aaa'] = a
Если выбрать [0]
, получить 2d
массив с размерами MxN
с формой (6,1)
, поэтому возможно использование numpy.vstack
:
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