1

I have the following sample data:

rec.array([('FY20',  361.410592  ,  nan, 21.97, nan, 'Total', 'Fast'),
       ('FY21',  359.26952604,  -1., 22.99,  5., 'Total', 'Fast'),
       ('FY22',  362.4560529 ,   1., 22.77, -1., 'Total', 'Fast'),
       ('FY23',  371.53543252,   2., 21.92, -4., 'Total', 'Fast'),
       ('FY24',  374.48894494,   1., 21.88, -0., 'Total', 'Fast'),
       ('FY25',  377.09481613,   1., 21.85, -0., 'Total', 'Fast'),
       ('FY20',   67.043756  ,  nan, 21.  , nan, 'Homes', 'Fast'),
       ('FY21',  110.12145222,  63., 20.95, -0., 'Homes', 'Fast'),
       ('FY22',  117.46526727,   7., 20.73, -1., 'Homes', 'Fast'),
       ('FY23',  125.83482531,   7., 18.99, -8., 'Homes', 'Fast'),
       ('FY24',  126.16748411,   1., 18.95, -0., 'Homes', 'Fast'),
       ('FY25',  127.786528  ,   1., 18.96,  0., 'Homes', 'Fast'),
       ('FY20',  294.366836  ,  nan, 22.19, nan, 'Businesses', 'Fast'),
       ('FY21',  249.14807381, -15., 23.89,  8., 'Businesses', 'Fast'),
       ('FY22',  245.99078563,  -2., 23.74, -1., 'Businesses', 'Fast'),
       ('FY23',  245.70060721,   0., 23.42, -1., 'Businesses', 'Fast'),
       ('FY24',  247.32146083,   1., 23.37, -0., 'Businesses', 'Fast'),
       ('FY25',  250.30828813,   1., 23.33, -0., 'Businesses', 'Fast'),
       ('FY20',  184.631684  ,  nan, 15.47, nan, 'Total', 'Medium'),
       ('FY21',  274.25718084,  49., 15.53,  0., 'Total', 'Medium'),
       ('FY22',  333.23835913,  21., 15.33, -1., 'Total', 'Medium'),
       ('FY23',  357.33167549,   7., 15.52,  1., 'Total', 'Medium'),
       ('FY24',  367.84796426,   3., 15.53,  0., 'Total', 'Medium'),
       ('FY25',  370.1664439 ,   1., 15.53,  0., 'Total', 'Medium'),
       ('FY20',   46.522416  ,  nan, 17.89, nan, 'Homes', 'Medium'),
       ('FY21',   97.63428522, 112., 18.72,  5., 'Homes', 'Medium'),
       ('FY22',  141.25547499,  46., 17.86, -5., 'Homes', 'Medium'),
       ('FY23',  157.06766598,  11., 18.33,  3., 'Homes', 'Medium'),
       ('FY24',  163.02337094,   4., 18.29, -0., 'Homes', 'Medium'),
       ('FY25',  165.98360465,   1., 18.28, -0., 'Homes', 'Medium'),
       ('FY20',  138.109268  ,  nan, 14.66, nan, 'Businesses', 'Medium'),
       ('FY21',  177.62289562,  28., 13.77, -6., 'Businesses', 'Medium'),
       ('FY22',  191.98288414,   8., 13.46, -2., 'Businesses', 'Medium'),
       ('FY23',  200.26400951,   4., 13.31, -1., 'Businesses', 'Medium'),
       ('FY24',  203.82459332,   2., 13.31,  0., 'Businesses', 'Medium'),
       ('FY25',  205.18283926,   1., 13.31,  0., 'Businesses', 'Medium')],
      dtype=[('FY', 'O'), ('ADV', '<f8'), ('YoY_ADV', '<f8'), ('Yield', '<f8'), ('YoY_Yld', '<f8'), ('Cut', 'O'), ('Product', 'O')])

I am having a hard time finding examples of where a dataframe was converted using to_records() back to a dataframe again. How do I convert this data into a dataframe?

2
  • What is rec ? Commented Dec 6, 2021 at 21:26
  • Passing the output of df.to... back through pd.DataFrame(...) is always a good guess. It's likely to produce some sort of frame. In this case the recarray has enough information about columns and dtypes to make a good replica of the original frame. Commented Dec 7, 2021 at 0:05

1 Answer 1

3

Make sure rec and nan are imported from numpy:

from numpy import rec, nan
a = rec.array([('FY20', 361.410592, nan, 21.97, nan, 'Total', 'Fast'), ('FY21', 359.26952604, -1., 22.99, 5., 'Total', 'Fast'), ('FY22', 362.4560529, 1., 22.77, -1., 'Total', 'Fast'), ('FY23', 371.53543252, 2., 21.92, -4., 'Total', 'Fast'), ('FY24', 374.48894494, 1., 21.88, -0., 'Total', 'Fast'), ('FY25', 377.09481613, 1., 21.85, -0., 'Total', 'Fast'), ('FY20', 67.043756, nan, 21., nan, 'Homes', 'Fast'), ('FY21', 110.12145222, 63., 20.95, -0., 'Homes', 'Fast'), ('FY22', 117.46526727, 7., 20.73, -1., 'Homes', 'Fast'), ('FY23', 125.83482531, 7., 18.99, -8., 'Homes', 'Fast'), ('FY24', 126.16748411, 1., 18.95, -0., 'Homes', 'Fast'), ('FY25', 127.786528, 1., 18.96, 0., 'Homes', 'Fast'), ('FY20', 294.366836, nan, 22.19, nan, 'Businesses', 'Fast'), ('FY21', 249.14807381, -15., 23.89, 8., 'Businesses', 'Fast'), ('FY22', 245.99078563, -2., 23.74, -1., 'Businesses', 'Fast'), ('FY23', 245.70060721, 0., 23.42, -1., 'Businesses', 'Fast'), ('FY24', 247.32146083, 1., 23.37, -0., 'Businesses', 'Fast'), ('FY25', 250.30828813, 1., 23.33, -0., 'Businesses', 'Fast'), ('FY20', 184.631684, nan, 15.47, nan, 'Total', 'Medium'), ('FY21', 274.25718084, 49., 15.53, 0., 'Total', 'Medium'), ('FY22', 333.23835913, 21., 15.33, -1., 'Total', 'Medium'), ('FY23', 357.33167549, 7., 15.52, 1., 'Total', 'Medium'), ('FY24', 367.84796426, 3., 15.53, 0., 'Total', 'Medium'), ('FY25', 370.1664439, 1., 15.53, 0., 'Total', 'Medium'), ('FY20', 46.522416, nan, 17.89, nan, 'Homes', 'Medium'), ('FY21', 97.63428522, 112., 18.72, 5., 'Homes', 'Medium'), ('FY22', 141.25547499, 46., 17.86, -5., 'Homes', 'Medium'), ('FY23', 157.06766598, 11., 18.33, 3., 'Homes', 'Medium'), ('FY24', 163.02337094, 4., 18.29, -0., 'Homes', 'Medium'), ('FY25', 165.98360465, 1., 18.28, -0., 'Homes', 'Medium'), ('FY20', 138.109268, nan, 14.66, nan, 'Businesses', 'Medium'), ('FY21', 177.62289562, 28., 13.77, -6., 'Businesses', 'Medium'), ('FY22', 191.98288414, 8., 13.46, -2., 'Businesses', 'Medium'), ('FY23', 200.26400951, 4., 13.31, -1., 'Businesses', 'Medium'), ('FY24', 203.82459332, 2., 13.31, 0., 'Businesses', 'Medium'), ('FY25', 205.18283926, 1., 13.31, 0., 'Businesses', 'Medium')], dtype=[('FY', 'O'), ('ADV', '<f8'), ('YoY_ADV', '<f8'), ('Yield', '<f8'), ('YoY_Yld', '<f8'), ('Cut', 'O'), ('Product', 'O')])

Then just pass it to the pd.DataFrame constructor:

import pandas as pd
df = pd.DataFrame(a)

#       FY         ADV  YoY_ADV  Yield  YoY_Yld         Cut Product
# 0   FY20  361.410592      NaN  21.97      NaN       Total    Fast
# 1   FY21  359.269526     -1.0  22.99      5.0       Total    Fast
# 2   FY22  362.456053      1.0  22.77     -1.0       Total    Fast
# 3   FY23  371.535433      2.0  21.92     -4.0       Total    Fast
# 4   FY24  374.488945      1.0  21.88     -0.0       Total    Fast
# 5   FY25  377.094816      1.0  21.85     -0.0       Total    Fast
# 6   FY20   67.043756      NaN  21.00      NaN       Homes    Fast
# 7   FY21  110.121452     63.0  20.95     -0.0       Homes    Fast
# 8   FY22  117.465267      7.0  20.73     -1.0       Homes    Fast
# 9   FY23  125.834825      7.0  18.99     -8.0       Homes    Fast
# 10  FY24  126.167484      1.0  18.95     -0.0       Homes    Fast
# 11  FY25  127.786528      1.0  18.96      0.0       Homes    Fast
# 12  FY20  294.366836      NaN  22.19      NaN  Businesses    Fast
# 13  FY21  249.148074    -15.0  23.89      8.0  Businesses    Fast
# 14  FY22  245.990786     -2.0  23.74     -1.0  Businesses    Fast
# 15  FY23  245.700607      0.0  23.42     -1.0  Businesses    Fast
# 16  FY24  247.321461      1.0  23.37     -0.0  Businesses    Fast
# 17  FY25  250.308288      1.0  23.33     -0.0  Businesses    Fast
# 18  FY20  184.631684      NaN  15.47      NaN       Total  Medium
# 19  FY21  274.257181     49.0  15.53      0.0       Total  Medium
# 20  FY22  333.238359     21.0  15.33     -1.0       Total  Medium
# 21  FY23  357.331675      7.0  15.52      1.0       Total  Medium
# 22  FY24  367.847964      3.0  15.53      0.0       Total  Medium
# 23  FY25  370.166444      1.0  15.53      0.0       Total  Medium
# 24  FY20   46.522416      NaN  17.89      NaN       Homes  Medium
# 25  FY21   97.634285    112.0  18.72      5.0       Homes  Medium
# 26  FY22  141.255475     46.0  17.86     -5.0       Homes  Medium
# 27  FY23  157.067666     11.0  18.33      3.0       Homes  Medium
# 28  FY24  163.023371      4.0  18.29     -0.0       Homes  Medium
# 29  FY25  165.983605      1.0  18.28     -0.0       Homes  Medium
# 30  FY20  138.109268      NaN  14.66      NaN  Businesses  Medium
# 31  FY21  177.622896     28.0  13.77     -6.0  Businesses  Medium
# 32  FY22  191.982884      8.0  13.46     -2.0  Businesses  Medium
# 33  FY23  200.264010      4.0  13.31     -1.0  Businesses  Medium
# 34  FY24  203.824593      2.0  13.31      0.0  Businesses  Medium
# 35  FY25  205.182839      1.0  13.31      0.0  Businesses  Medium
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

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.