我有一个pandas数据框(1413行)和一个numpy数组(1412行)。
# Install a pip package in the current Jupyter kernel
import sys
!{sys.executable} -m pip install -r requirements.txt
我想用arr1 + nan中的一列填充df1中的一列,但这不起作用
type(df1)
Out[193]: pandas.core.frame.DataFrame
df1.shape
Out[194]: (1413, 15)
type(arr1)
Out[195]: numpy.ndarray
arr1.shape
Out[196]: (1412, 3)
有人可以让我知道怎么做吗?
答案 0 :(得分:0)
这是你的意思吗?
df1['aaa'] = pandas.DataFrame(arr1[:, 0])[0]
答案 1 :(得分:0)
使用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
的{{1}}数组,那么有必要numpy.hstack
:
(6,)
如果通过a = np.hstack((np.nan, arr1[:,0]))
print (a)
[nan 0. 3. 6. 9. 12.]
print (a.shape)
(6,)
df1['aaa'] = a
进行选择,将得到形状为[0]
且尺寸为2d
的{{1}}数组,则可以使用numpy.vstack
:
MxN
答案 2 :(得分:0)
您可以执行此操作,这里您将得到结果。您添加了该列,第一行是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')
这是您的DataFrame:
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
答案 3 :(得分:0)
您可以使用np.append
df1['aaa'] = np.append(np.nan, arr1[:,0])
答案 4 :(得分:0)
虽然我可以看到其他几个答案,但它们都没有真正解决当前的问题。凭直觉,您的方法还可以;您正在将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)))