Python
DataFrame
Pandas
Data Analysis
Programming

Convert Python dict into a dataframe

Master System Design with Codemia

Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.

Introduction

Converting a Python dictionary into a pandas DataFrame is straightforward once you know what shape the dictionary represents. The main question is whether the keys represent columns, rows, or records, because pandas supports each of those patterns with slightly different constructors.

Dictionary of lists becomes columns

The most common case is a dictionary where each key is a column name and each value is a list of column values.

python
1import pandas as pd
2
3data = {
4    "name": ["Alice", "Bob", "Charlie"],
5    "age": [25, 30, 35],
6    "city": ["Toronto", "Vancouver", "Montreal"],
7}
8
9df = pd.DataFrame(data)
10print(df)

This is the simplest constructor path. pandas assumes each list is one column and aligns rows by position.

That also means the lists should be the same length. If they are not, construction will fail because pandas cannot form a rectangular table from columns of incompatible sizes.

List of dictionaries becomes rows

Sometimes the source data looks like records rather than columns.

python
1import pandas as pd
2
3records = [
4    {"name": "Alice", "age": 25, "city": "Toronto"},
5    {"name": "Bob", "age": 30, "city": "Vancouver"},
6    {"name": "Charlie", "age": 35, "city": "Montreal"},
7]
8
9df = pd.DataFrame(records)
10print(df)

Here each dictionary becomes one row. This is often the right format when data arrives from JSON APIs or row-oriented processing.

If some dictionaries are missing keys, pandas fills those cells with NaN. That behavior is useful, but it also means inconsistent input can silently introduce missing data if you are not watching for it.

Use from_dict when orientation matters

DataFrame.from_dict is useful when the dictionary should be interpreted differently, especially when keys represent rows instead of columns.

python
1import pandas as pd
2
3scores = {
4    "alice": {"math": 90, "science": 88},
5    "bob": {"math": 75, "science": 92},
6}
7
8df = pd.DataFrame.from_dict(scores, orient="index")
9print(df)

With orient="index", the outer keys become row labels. Without that argument, pandas would try to treat the outer keys as columns instead.

This is one of the most common points of confusion. The data is still a dictionary, but the intended table shape is different.

Choose the constructor by data shape

A practical rule is:

  • dictionary of lists: pd.DataFrame(data)
  • list of dictionaries: pd.DataFrame(records)
  • nested dictionary with row keys: pd.DataFrame.from_dict(data, orient="index")

Once you think in terms of table shape rather than only Python type, the constructor choice becomes much easier.

Set the index deliberately when needed

Sometimes the dictionary already contains a natural identifier such as a user id or date key. In that case, building the DataFrame is only the first step. You may also want to move one field into the index so later joins, lookups, or time-series operations behave the way you expect. That is another reason to inspect the resulting frame rather than assuming the default integer index is always the right shape.

Common Pitfalls

  • Forgetting that a dictionary of lists requires all lists to have compatible lengths.
  • Treating a list of dictionaries like a dictionary of columns and getting the wrong shape.
  • Ignoring orient="index" when the outer keys should become rows.
  • Being surprised by NaN values when some records omit keys.
  • Converting data successfully but not checking whether the resulting columns and index actually match the intended layout.

Summary

  • pandas can build a DataFrame from several dictionary-shaped inputs.
  • The right constructor depends on whether the data is column-oriented, row-oriented, or index-oriented.
  • 'pd.DataFrame(...) handles common column and record cases well.'
  • 'from_dict(..., orient="index") is useful when dictionary keys should become rows.'
  • Think about the table shape first, then choose the constructor.

Course illustration
Course illustration

All Rights Reserved.