![](/img/trans.png)
[英]How to convert pandas dataframe into the numpy array with column names?
[英]How to convert a pandas dataframe into a numpy array with the column names
我想從熊貓數據幀創建一個 numpy 數組。
我的代碼:
import pandas as pd
_df = pd.DataFrame({'itme': ['book', 'book' , 'car', ' car', 'bike', 'bike'], 'color': ['green', 'blue' , 'red', 'green' , 'blue', 'red'], 'val' : [-22.7, -109.6, -57.19, -11.2, -25.6, -33.61]})
item color val
book green -22.70
book blue -109.60
car red -57.19
car green -11.20
bike blue -25.60
bike red -33.61
大約有 12,000 行。
我需要創建一個 numpy 數組,如:
item green blue red
book -22.70 -109.60 null
car -11.20 null -57.19
bike null -25.60 -33.16
每行是項目名稱,每列是顏色名稱。 項目和顏色的順序並不重要。 但是,在 numpy 數組中,沒有行名和列名,我需要保留每個值的項目和顏色名稱,以便我知道該值在 numpy 數組中代表什么。
例如
how to know that -57.19 is for "car" and "red" in numpy array ?
所以,我需要創建一個字典來保持以下之間的映射:
item <--> row index in the numpy array
color <--> col index in the numpy array
我不想使用 iteritems 和 itertuples,因為它們對大型數據幀效率不高,因為如何在 Pandas 中的 DataFrame 中迭代行以及如何在 Pandas 中的 DataFrame 中迭代行和Python Pandas 迭代行並訪問列名和熊貓 iterrows 有性能問題嗎?
為此,我更喜歡 numpy 矢量化解決方案。
如何有效地將熊貓數據幀轉換為 numpy 數組? 該數組也將轉換為 torch.tensor。
謝謝
pandas.DataFrame.to_records
將數據幀轉換為numpy.recarry
,並使用布爾索引.item
是pandas
和numpy
的方法,所以不要使用'item'
作為列名。 它已更改為'_item'
。numpy
是一個pandas
依賴項,並且許多pandas
向量化功能直接對應於numpy
。import pandas as pd
import numpy as np
# test data
df = pd.DataFrame({'_item': ['book', 'book' , 'car', 'car', 'bike', 'bike'], 'color': ['green', 'blue' , 'red', 'green' , 'blue', 'red'], 'val' : [-22.7, -109.6, -57.19, -11.2, -25.6, -33.61]})
# Use pandas Boolean index to
selected = df[(df._item == 'book') & (df.color == 'blue')]
# print(selected)
_item color val
book blue -109.6
# Alternatively, create a recarray
v = df.to_records(index=False)
# display(v)
rec.array([('book', 'green', -22.7 ), ('book', 'blue', -109.6 ),
('car', 'red', -57.19), ('car', 'green', -11.2 ),
('bike', 'blue', -25.6 ), ('bike', 'red', -33.61)],
dtype=[('_item', 'O'), ('color', 'O'), ('val', '<f8')])
# search the recarray
selected = v[(v._item == 'book') & (v.color == 'blue')]
# print(selected)
[('book', 'blue', -109.6)]
pandas.DataFrame.pivot
重塑數據pandas.DataFrame.pivot
,然后使用前面提到的方法。dfp = df.pivot(index='_item', columns='color', values='val')
# display(dfp)
color blue green red
_item
bike -25.6 NaN -33.61
book -109.6 -22.7 NaN
car NaN -11.2 -57.19
# create a numpy recarray
v = dfp.to_records(index=True)
# display(v)
rec.array([('bike', -25.6, nan, -33.61),
('book', -109.6, -22.7, nan),
('car', nan, -11.2, -57.19)],
dtype=[('_item', 'O'), ('blue', '<f8'), ('green', '<f8'), ('red', '<f8')])
# select data
selected = v.blue[(v._item == 'book')]
# print(selected)
array([-109.6])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.