如何将dataframe转换为具有列名的numpy数组?

2024-05-03 04:43:53 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将pandasDataFrame转换为以下具有列名的Numpy数组

array([('Heidi Mitchell', 'uboyd@hotmail.com', 74, 52, 'female', '1121', 'cancer', '03/06/2018'),
       ('Kimberly Kent', 'wilsoncarla@mitchell-gree', 63, 51, 'male', '2003', 'cancer', '16/06/2017')],
      dtype=[('name', '<U16'), ('email', '<U25'), ('age', '<i4'), ('weight', '<i4'), ('gender', '<U10'), ('zipcode', '<U6'), ('diagnosis', '<U6'), ('dob', '<U16')])

这是我的熊猫数据帧df

col1  col2
3     5
3     1
4     5    
1     5
2     2

我尝试将其转换为以下内容:

import numpy as np

dt = np.dtype([('col1', np.int32), ('col2', np.int32)])
arr = np.array(df.values, dtype=dt)

但它给我的输出如下:

array([[(3, 5), (3, 1)],
      ...
      dtype=[('col1', '<i4'), ('col2', '<i4')])

出于某种原因,数据行被分组为[(3, 5), (3, 1)],而不是[(3, 5), (3, 1), (4, 5), (1, 5), (1, 2)]


Tags: 数据numpydfnpdtarraycol2col1
2条回答

您可以使用df.to_records(index=False)将数据帧转换为结构化数组:

import pandas as pd
data = [ { "col1": 3, "col2": 5 }, { "col1": 3, "col2": 1 }, { "col1": 4, "col2": 5 }, { "col1": 1, "col2": 5 }, { "col1": 2, "col2": 2 } ]
df = pd.DataFrame(data)
df.to_records(index=False)

输出:

rec.array([(3, 5), (3, 1), (4, 5), (1, 5), (2, 2)],
          dtype=[('col1', '<i8'), ('col2', '<i8')])

使用pandas函数to_records(),该函数将数据帧转换为numpy记录数组。链接如下:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_records.html

网站中给出的一些示例如下:

>>> df = pd.DataFrame({'A': [1, 2], 'B': [0.5, 0.75]},
                       index=['a', 'b'])
>>> df
   A     B
a  1  0.50
b  2  0.75
>>> df.to_records()
rec.array([('a', 1, 0.5 ), ('b', 2, 0.75)],
          dtype=[('index', 'O'), ('A', '<i8'), ('B', '<f8')])

可以从记录数组中排除索引:

>>> df.to_records(index=False)
rec.array([(1, 0.5 ), (2, 0.75)],
          dtype=[('A', '<i8'), ('B', '<f8')])

相关问题 更多 >