Python:用一列numpy数组填充熊猫数据框的一行

时间:2020-03-24 08:29:10

标签: python pandas numpy dataframe

我有一个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)

有人可以让我知道怎么做吗?

5 个答案:

答案 0 :(得分:0)

这是你的意思吗?

df1['aaa'] = pandas.DataFrame(arr1[:, 0])[0]

答案 1 :(得分:0)

使用numpy.hstack1d数组添加一个值:

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)))