0

I am trying to work on a requirement where I am trying to see the data type of the structure array. Here is the code-

OrderDate = ['05-11-1996', '01-01-1971', '03-15-1969', '08-09-1983']
OrderAmount = [25.9, 44.8, 36.1, 29.4]
OrderNumber = [25, 45, 37, 19]
OrderName=['Ronaldo','Messi','Dybala','Pogba']
import numpy as np
data = np.zeros(3, dtype={'OrderDates':('OrderDate','OrderAmount', 'OrderNumber','OrderName'),
 'formats':('U10','f8','i4','U10')})
print(data.dtype)

The Output should be:-

[('OrderDate', '<U10'), ('OrderAmount', '<f8'), ('OrderNumber', '<i4'), ('OrderName', '<U10')]

But i am getting an error-

 ValueError Traceback (most recent call last)
<ipython-input-10-727f000630c8> in <module>()
 1 import numpy as np
 2 data = np.zeros(3, dtype={'OrderDates':('OrderDate','OrderAmount', 'OrderNumber','OrderName'),
----> 3 'formats':('U10','f8','i4','U10')})
 4 print(data.dtype)
1 frames
/usr/local/lib/python3.7/dist-packages/numpy/core/_internal.py in _makenames_list(adict, align)
 30 n = len(obj)
 31 if not isinstance(obj, tuple) or n not in [2, 3]:
---> 32 raise ValueError("entry not a 2- or 3- tuple")
 33 if (n > 2) and (obj[2] == fname):
 34 continue
ValueError: entry not a 2- or 3- tuple

Can you please tell me where am i going wrong?

asked Nov 4, 2021 at 23:37

2 Answers 2

1

The numpy.zeros() function returns a new array of given shape and type, with zeros.

Syntax:

numpy.zeros(shape, dtype = None, order = 'C')

You are using wrong syntax, it should looks like:

import numpy as np
data = np.zeros((2,), dtype=[('OrderDate','U10'),('OrderAmount','f8') 
('OrderNumber','i4'),('OrderName','U10')]) # custom dtype
print(data.dtype)

[('OrderDate', '<U10'), ('OrderAmount', '<f8'), ('OrderNumber', '<i4'), ('OrderName', '<U10')]

answered Nov 4, 2021 at 23:52
Sign up to request clarification or add additional context in comments.

Comments

1

Use 'names' as the dict key:

In [178]: data = np.zeros(3, dtype={'names':('OrderDate','OrderAmount', 'OrderNu
 ...: mber','OrderName'),
 ...: 'formats':('U10','f8','i4','U10')})
In [179]: data
Out[179]: 
array([('', 0., 0, ''), ('', 0., 0, ''), ('', 0., 0, '')],
 dtype=[('OrderDate', '<U10'), ('OrderAmount', '<f8'), ('OrderNumber', '<i4'), ('OrderName', '<U10')])

Though I usually use the list of tuples format, same as the default dtype display.

answered Nov 5, 2021 at 0:54

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.