使用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 的非默认索引是使用带有索引 df1.index 的 Series 构造函数:
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