亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python:用一列麻木數組填充熊貓數據幀的一行

Python:用一列麻木數組填充熊貓數據幀的一行

青春有我 2022-09-13 10:15:45
我有一個熊貓數據幀(1413行)和一個numpy數組(1412行)。type(df1)Out[193]: pandas.core.frame.DataFramedf1.shapeOut[194]: (1413, 15)type(arr1)Out[195]: numpy.ndarrayarr1.shapeOut[196]: (1412, 3)我想用arr1 + nan中的列填充df1中的列,但它不起作用df1['aaa'] = np.vstack((np.nan, arr1[:,0]))任何人都可以讓我知道如何做嗎?
查看完整描述

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   


查看完整回答
反對 回復 2022-09-13
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

雖然我可以看到其他幾個答案,但沒有一個真正解決了手頭的問題。直觀地說,你的方法是可以的;您正在列數組上垂直堆疊。nan

df1['aaa'] = np.vstack((np.nan, arr1[:,0]))

它應該工作,但它沒有。這里的小問題是搜索列維度。 具有形狀 ;它沒有第二個維度。簡單地重塑它將使工作正常。vstackarr1[:,0](1412, )(1412,1)vstack

df1['aaa'] = np.vstack((np.nan, arr1[:,0].reshape(-1,1)))


查看完整回答
反對 回復 2022-09-13
?
四季花海

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


查看完整回答
反對 回復 2022-09-13
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

您可以使用 np.附加

df1['aaa'] = np.append(np.nan, arr1[:,0])


查看完整回答
反對 回復 2022-09-13
  • 4 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號