Reputation: 5789
consider this numpy array:
array([('jona', (1,), '2021-01-08 07:38:10.000700 UTC', 1835.0, 1594.0, 0.07, 0.06, 0.08, 30.0, 272.0, nan),
('veep', (2,), '2021-01-08 07:38:10.000700 UTC', 52.0, 1594.0, 0.07, 0.07, 0.08, 0.0, 272.0, nan),
('hristo', (3,), '2021-01-08 07:38:10.000700 UTC', 52.0, 1594.0, 0.07, 0.07, 0.08, 0.0, 272.0, nan),
dtype=[('name', 'O'), ('SIZE', 'O'), ('DATETIME', 'O'), ('OTH_SIZE', 'O'), ('THO_SIZE', 'O'), ('HAP', 'O'), ('NAP', 'O'), ('NOPE', 'O'), ('IMPLIED_NOPE', 'O'), ('IMPLIED_NAP', 'O'), ('Emptier', 'O')])
I would like to copy it to a numpy new array with the following types
array([('jona', (1,), '2021-01-08 07:38:10.000700 UTC', 1835.0, 1594.0, 0.07, 0.06, 0.08, 30.0, 272.0, nan),
('veep', (2,), '2021-01-08 07:38:10.000700 UTC', 52.0, 1594.0, 0.07, 0.07, 0.08, 0.0, 272.0, nan),
('hristo', (3,), '2021-01-08 07:38:10.000700 UTC', 52.0, 1594.0, 0.07, 0.07, 0.08, 0.0, 272.0, nan),
dtype=[('name', 'O'), ('SIZE', '<i2'), ('DATETIME', 'O'), ('OTH_SIZE', '<i2'), ('THO_SIZE', '<i2'), ('HAP', '<f8'), ('NAP', '<f8'), ('NOPE', '<f8'), ('IMPLIED_NOPE', '<i2'), ('IMPLIED_NAP', '<i2'), ('Emptier', 'O')])
The one thing is I can't use pandas (the application need to run using only numpy).
Upvotes: 0
Views: 40
Reputation: 734
One way is to change the dtype at array creation:
import numpy as np
a = np.array([('jona', (1,), '2021-01-08 07:38:10.000700 UTC', 1835.0, 1594.0, 0.07, 0.06, 0.08, 30.0, 272.0, np.nan),
('veep', (2,), '2021-01-08 07:38:10.000700 UTC', 52.0, 1594.0, 0.07, 0.07, 0.08, 0.0, 272.0, np.nan),
('hristo', (3,), '2021-01-08 07:38:10.000700 UTC', 52.0, 1594.0, 0.07, 0.07, 0.08, 0.0, 272.0, np.nan)],
dtype=[('name', 'O'), ('SIZE', 'O'), ('DATETIME', 'O'), ('OTH_SIZE', 'O'), ('THO_SIZE', 'O'), ('HAP', 'O'),
('NAP', 'O'), ('NOPE', 'O'), ('IMPLIED_NOPE', 'O'), ('IMPLIED_NAP', 'O'), ('Emptier', 'O')] )
b = np.array(a.tolist(),dtype=[('name', 'O'), ('SIZE', '(1,)<i2'), ('DATETIME', 'O'), ('OTH_SIZE', '<i2'), ('THO_SIZE', '<i2'), ('HAP', '<f8'),
('NAP', '<f8'), ('NOPE', '<f8'), ('IMPLIED_NOPE', '<i2'), ('IMPLIED_NAP', '<i2'), ('Emptier', 'O')])
The only caveat is, that changing to ('SIZE', '(1,)<i2')
requires to set the shape and the additional list-conversion step a.tolist()
- not necessary, if you keep it as ('SIZE', 'O')
.
Upvotes: 1