# How to Convert a Pandas DataFrame Column to a List: A Complete Guide

> Easily convert a pandas DataFrame column to a Python list using the tolist or to_list methods. This guide shows you how to access your data efficiently.

- Repository: [pandas/pandas](https://github.com/pandas-dev/pandas)
- Tags: how-to-guide
- Published: 2026-02-16

---

**Use `df['column_name'].tolist()` or `df['column_name'].to_list()` to convert any pandas DataFrame column into a standard Python list.**

Converting a pandas DataFrame column to a list is a fundamental operation in data processing workflows. According to the pandas-dev/pandas source code, this conversion leverages the underlying Series object architecture to return Python-native list structures efficiently.

## Understanding the Implementation in pandas/core/base.py

When you select a single column from a DataFrame using `df['column_name']`, pandas returns a **Series** object. The `Series` class inherits from `NDFrame`, which implements the `tolist` method in [`pandas/core/base.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/base.py).

The implementation at lines 1818-1854 delegates directly to the underlying array's `tolist` method:

```python

# Conceptual implementation from pandas/core/base.py

def tolist(self):
    """
    Return a list of the values.
    
    These are each a scalar type, which is a Python scalar
    (for str, int, float) or a pandas scalar
    (for Timestamp/Timedelta/Interval/Period).
    """
    return self.array.tolist()

```

This architecture ensures that converting a DataFrame column to a list is a thin wrapper around NumPy's native conversion, maintaining performance while handling pandas-specific scalar types like `Timestamp` correctly.

## Methods to Convert a DataFrame Column to a List

### Using tolist() (Standard Method)

The primary method for converting a pandas DataFrame column to a list is `tolist()`. This method is available on any Series object returned by column selection:

```python
import pandas as pd

# Create sample DataFrame

df = pd.DataFrame({
    "id": [101, 102, 103],
    "product": ["Widget", "Gadget", "Tool"],
    "price": [19.99, 29.99, 39.99]
})

# Convert DataFrame column to list using tolist()

product_list = df["product"].tolist()
print(product_list)

# Output: ['Widget', 'Gadget', 'Tool']

```

### Using to_list() (Alias Method)

pandas provides `to_list()` as an alias for `tolist()`. Both methods execute identical code paths in [`pandas/core/base.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/base.py) and produce the same results:

```python

# Convert column using the to_list() alias

price_list = df["price"].to_list()
print(price_list)

# Output: [19.99, 29.99, 39.99]

```

Choose `tolist()` for consistency with NumPy's API or `to_list()` if you prefer snake_case naming conventions.

## Handling Special Data Types and Edge Cases

When you convert a pandas DataFrame column containing specialized types to a list, the method handles conversion to pandas scalars automatically:

```python

# Convert datetime column to list

df["date"] = pd.to_datetime(["2023-01-15", "2023-02-20", "2023-03-25"])
date_list = df["date"].tolist()

print(date_list)

# Output: [Timestamp('2023-01-15 00:00:00'), Timestamp('2023-02-20 00:00:00'), Timestamp('2023-03-25 00:00:00')]

```

The `tolist()` method in [`pandas/core/base.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/base.py) ensures that **NaN** values are preserved as `float('nan')` or `pd.NA` depending on the array type, maintaining data integrity during conversion.

## Performance Considerations

Converting a DataFrame column to a list using `tolist()` is memory-efficient because it leverages the underlying array's native conversion method. Unlike Python's built-in `list()` constructor which must iterate through the Series, `tolist()` delegates to the array level in [`pandas/core/base.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/base.py), minimizing overhead.

For large datasets, this approach is significantly faster than list comprehensions or `list(df['column'])` because it avoids Python-level iteration loops.

## Summary

- **Primary method**: Use `df['column'].tolist()` to convert any pandas DataFrame column to a Python list.
- **Alternative syntax**: Use `df['column'].to_list()` for identical functionality with snake_case naming.
- **Implementation location**: The `tolist()` method is defined in [`pandas/core/base.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/base.py) within the `NDFrame` class and inherited by `Series`.
- **Type handling**: The method automatically converts pandas scalars (like `Timestamp`) and preserves null values during conversion.
- **Performance**: This approach is optimized through delegation to underlying array methods, making it faster than Python's built-in `list()` constructor for large datasets.

## Frequently Asked Questions

### What is the difference between tolist() and to_list() in pandas?

There is no functional difference between `tolist()` and `to_list()`. According to the pandas source code in [`pandas/core/base.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/base.py), `to_list()` is simply an alias that points to the same implementation as `tolist()`. Use `tolist()` for consistency with NumPy arrays, or `to_list()` if you prefer Pythonic snake_case naming conventions.

### How do I convert multiple DataFrame columns to lists at once?

To convert multiple columns simultaneously, iterate over the column names and apply `tolist()` to each Series, or use a dictionary comprehension: `{col: df[col].tolist() for col in ['col1', 'col2']}`. Alternatively, use `df[['col1', 'col2']].values.tolist()` to get a list of rows, though this produces a list of lists rather than separate column lists.

### Does tolist() work with missing values (NaN)?

Yes, `tolist()` handles missing values correctly. When converting a DataFrame column containing `NaN` values to a list, pandas preserves them as `float('nan')` for float columns or `pd.NA` for nullable integer types. The implementation in [`pandas/core/base.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/base.py) ensures that the underlying array's `tolist` method maintains these sentinel values during conversion to Python scalars.

### Is there a performance difference between tolist() and list(df['column'])?

Yes, `tolist()` is significantly faster than `list(df['column'])` for large datasets. The `tolist()` method delegates directly to the underlying array's native conversion in [`pandas/core/base.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/base.py), while `list()` must iterate through the Series using Python-level loops. For DataFrames with millions of rows, `tolist()` avoids the overhead of Python iteration, making it the preferred method for converting a pandas DataFrame column to a list.