簡體   English   中英

熊貓數據幀到一維數組

[英]Pandas dataframe to 1-d array

我有一個包含很多列的數據框。

我首先通過r_i = df.iloc[:, i: i + 1]從數據r_i = df.iloc[:, i: i + 1]只選擇一列

然后我想簡單地通過np.array(r_i)將這個r_i變成數組。

我想要的結果是: array([-1, -2, -3]) 換句話說,它應該是一個列表的數組。

但是,它給了我一個由子列表組成的列表的array([[-1], [-2], [-3]])array([[-1], [-2], [-3]])

我如何防止這種情況發生?

謝謝你。

所以,給定:

>>> df = pd.DataFrame({'a':[1,2,3,4], 'b':[5,6,7,8], 'c':[9,10,11,12]})
>>> i = 1
>>> df
   a  b   c
0  1  5   9
1  2  6  10
2  3  7  11
3  4  8  12
>>> df.iloc[:, i: i + 1]
   b
0  5
1  6
2  7
3  8
>>> np.array(df.iloc[:, i: i + 1])
array([[5],
       [6],
       [7],
       [8]])

你可以使用.squeeze方法,它從你的數組中刪除一個維度:

>>> np.array(df.iloc[:, i: i + 1]).squeeze()
array([5, 6, 7, 8])

雖然我可能只是使用:

>>> df.iloc[:, i: i + 1].values.squeeze()
array([5, 6, 7, 8])

或者,您始終可以使用.reshape ,這應該是您想要重塑數組時的第一直覺:

>>> np.array(df.iloc[:, i: i + 1]).reshape(-1)
array([5, 6, 7, 8])

請注意,如果您不小心添加了額外的列,這些行為會有所不同,因此:

>>> np.array(df.iloc[:, i: i + 2])
array([[ 5,  9],
       [ 6, 10],
       [ 7, 11],
       [ 8, 12]])

隨着重塑:

>>> np.array(df.iloc[:, i: i + 2]).reshape(-1)
array([ 5,  9,  6, 10,  7, 11,  8, 12])

與擠壓:

>>> np.array(df.iloc[:, i: i + 2]).squeeze()
array([[ 5,  9],
       [ 6, 10],
       [ 7, 11],
       [ 8, 12]])

理想情況下,您可能只希望它失敗,因此如果您想進行防御性編程,請使用帶有顯式參數的reshape而不是-1

>>> np.array(df.iloc[:, i: i + 1]).reshape((df.shape[0],))
array([5, 6, 7, 8])
>>> np.array(df.iloc[:, i: i + 2]).reshape((df.shape[0],))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot reshape array of size 8 into shape (4,)
>>>

然而

您可以通過不做不必要的切片來避免這種情況,因此:

>>> df.iloc[:, i: i + 1]
   b
0  5
1  6
2  7
3  8
>>> df.iloc[:, i + 1]
0     9
1    10
2    11
3    12
Name: c, dtype: int64

后者給你一個series ,它已經是一維的,所以你可以使用:

>>> df.iloc[:, i + 1].values
array([ 9, 10, 11, 12])
df.values.flatten()

在這里,df 是您的 DataFrame。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM