使用pandas.dataframe.values到numpy阵列的熊猫数据框



我有一个数据框,如下所示。我想让它成为一个数组。当我使用df.values命令时,它将作为numpy数组制作,但所有属性都转换为float。我检查了DF.Values文档,但没有帮助,我可以将DF的同一数据类型分配给Numpy?

事先感谢您的帮助

                   High          Low  ...      Volume    Adj Close
Date                                  ...                         
2018-12-20  2509.629883  2441.179932  ...  5585780000  2467.419922
2018-12-21  2504.409912  2408.550049  ...  7609010000  2416.620117
2018-12-24  2410.340088  2351.100098  ...  2613930000  2351.100098
2018-12-26  2467.760010  2346.580078  ...  4233990000  2467.699951
2018-12-27  2489.100098  2397.939941  ...  4096610000  2488.830078
2018-12-28  2520.270020  2472.889893  ...  3702620000  2485.739990
2018-12-31  2509.239990  2482.820068  ...  3442870000  2506.850098
2019-01-02  2519.489990  2467.469971  ...  3733160000  2510.030029

numpy数组具有统一的数据类型,您可以从文档中看到:

numpy.ndarray class numpy.ndarray(shape,dtype = float,buffer = none,

offset = 0,步幅= none,order = none)[源]数组对象代表固定大小项目的多维同质阵列。一个关联的数据类型对象描述了每个元素的格式数组(其字节订单,它在内存中占有多少个字节,无论是整数,浮点数还是其他东西,等)

当您使用df.values时,它将将所有值投放到最合适的数据类型以保持同质性。

pandas.dataframe.values也提到:

注释

dtype将是一个较低的contemoinator dtype(隐式升级);也就是说,是否dtypes(甚至数字类型)混合,将选择所有容纳所有人的人。使用此注意如果您不处理块。

例如。如果dtypes为float16和float32,则DTYPE将会升至float32。如果DTYPES为INT32和UINT8,则DTYPE将升至INT32。由numpy.find_common_type()约定,混合int64和uint64将导致float64 dtype。

您可以使用numpy结构化数组进行操作。我将创建一个只有2行和2列与您的数据框架,以说明如何使用任何大小的数据框架进行操作。

import Pandas as pd
import Numpy as np
df = pd.DataFrame({'High': [2509.629883, 2504.409912], 
                   'Volume': [5585780000, 7609010000]}, 
                  index=np.array(['2018-12-20', '2018-12-21'], dtype='datetime64'))

然后,您创建一个空的numpy数组来定义每列必须具有的数据类型。在我的示例中,我只有2行,因此数组只有2行如下:

array = np.empty(2, dtype={'names':('col1', 'col2', 'col3'),
                          'formats':('datetime64[D]', 'f8', 'i8')})
array['col1'] = df.index
array['col2'] = df['High']
array['col3'] = df['Volume']

,阵列看起来像:

array([('2018-12-20', 2509.629883, 5585780000),
       ('2018-12-21', 2504.409912, 7609010000)],
      dtype=[('col1', '<M8[D]'), ('col2', '<f8'), ('col3', '<i8')])

您还可以使用命令np.rec.array创建np.recarray类。这几乎与仅有一个额外功能的结构化阵列相同。您可以作为属性访问字段,即array.col1而不是array['col1']。但是,Numpy记录阵列显然比结构化数组慢!

最新更新