in [ ]data np array([(( ) )(( ) )]dtype=dtypein [ ]data[' 'out[ ]array([( )( )]dtype=[(' ''< ')(' ''< ')]in [ ]data[' 'out[ ]array([ ]dtype=int in [ ]data[' '][' 'out[ ]array( ]as you can seevariable-shape fields and nested records is very rich feature that can be the right tool in certain circumstances dataframe from pandasby contrastdoes not support this feature directlythough it is similar to hierarchical indexing why use structured arrayscompared withsaya dataframe from pandasnumpy structured arrays are comparatively low-level tool they provide means to interpreting block of memory as tabular structure with arbitrarily complex nested columns since each element in the array is represented in memory as fixed number of bytesstructured arrays provide very fast and efficient way of writing data to and from disk (including memory mapsmore on this later)transporting it over the networkand other such use as another common use for structured arrayswriting data files as fixed length record byte streams is common way to serialize data in and +codewhich is commonly found in legacy systems in industry as long as the format of the file is known (the size of each record and the orderbyte sizeand data type of each element)the data can be read into memory using np fromfile specialized uses like this are beyond the scope of this bookbut it' worth knowing that such things are possible structured array manipulationsnumpy lib recfunctions while there is not as much functionality available for structured arrays as for dataframesthe numpy module numpy lib recfunctions has some helpful tools for adding and dropping fields or doing basic join-like operations the thing to remember with these tools is that it is typically necessary to create new array to make any modifications to the dtype (like adding or dropping columnthese functions are left to the interested reader to explore as do not use them anywhere in this book advanced numpy www it-ebooks info