3
\$\begingroup\$

I request data from a table in a database and each line comes as a dictionary like this one :

{
    "timestamp" : 1234657890,
    "prices" : {
                   "AAA" : 111,
                   "BBB" : 222,
                    ...
                   "ZZZ" : 999
               }
}

From all those lines i wanted to create a dataframe like this:

Timestamp    AAA    BBB    ...   ZZZ
1234657890   111    222    ...   999
1234567891   110    223    ...   997
   ...
1324657899   123    208    ...  1024

So i did :

rawData = database_request()
listPrices = []
for row in rawData
    tmp = {'timestamp': row['timestamp']}
    tmp.update({name : price for name,price in row['prices'].items()})
    listPrices.append(tmp)
df = pd.DataFrame(listePrices)

So i was wondering if there were a more pythonic way to do this ?

\$\endgroup\$
3
  • 1
    \$\begingroup\$ Does it only have prices and timestamps in the dictionary? \$\endgroup\$ Commented Oct 14, 2020 at 9:40
  • \$\begingroup\$ yes only those two fields \$\endgroup\$ Commented Oct 14, 2020 at 9:42
  • 1
    \$\begingroup\$ You need pd.json_normalize here. \$\endgroup\$ Commented Oct 14, 2020 at 12:05

1 Answer 1

3
\$\begingroup\$

Your rawData (which should be ideally named raw_data, python suggests a style guide to name variables and functions in lower_snake_case) is already in a list structure. You can manipulate this in place, without having to process the whole dataset manually.

for row in raw_data:
    row.update(row.pop("prices"))
\$\endgroup\$

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.