[英]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.