# How to Transpose a DataFrame in Pandas Without the Index

> Learn how to transpose a Pandas DataFrame without the index. Discover efficient methods to reset or remove the index and axis names for cleaner data manipulation.

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

---

**Use `df.T.reset_index(drop=True)` to transpose a DataFrame and replace the original index with a fresh integer index, or chain `.rename_axis(None, axis=1)` to also remove the column axis name.**

The pandas transpose functionality allows you to pivot rows into columns and vice versa, but by default it preserves the original index as the new column labels. According to the pandas-dev/pandas source code, both the `.T` property and `.transpose()` method are implemented in [`pandas/core/frame.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/frame.py) and maintain index alignment by default. To achieve a clean transposition without carrying over the original index structure, you must reset the index immediately after the operation.

## How Pandas Transpose Handles Indexes

When you execute a pandas transpose operation, the library swaps the axes of your DataFrame. The original row index becomes the column index, and the original columns become the rows. This behavior is hardcoded in the core implementation at **[`pandas/core/frame.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/frame.py)** line 3897 for the `transpose()` method, while the `T` property at line 4083 simply returns `self.transpose()`【grep】.

By design, pandas maintains data alignment and metadata during this transformation. If your DataFrame has a custom index—such as strings, dates, or integers—that index becomes the header of your transposed data. To obtain a transposed DataFrame with a default RangeIndex (0, 1, 2...), you must explicitly reset the index after transposition.

## Removing the Index After Transposition

There is no built-in parameter within the pandas transpose methods to discard the index during the operation. Instead, you chain `reset_index()` with `drop=True` to prevent the old index from being added as a column.

### Resetting the Row Index

The most common approach uses the `T` shortcut followed by `reset_index()`:

```python
transposed = df.T.reset_index(drop=True)

```

Setting `drop=True` prevents pandas from inserting the former index values as a new column in the DataFrame. The result is a transposed structure with rows labeled 0, 1, 2, and so on.

### Cleaning Column Axis Names

If the original index had a name, or if you want to ensure the column axis has no name attribute, use `rename_axis()`:

```python
transposed = (
    df.T
      .reset_index(drop=True)
      .rename_axis(None, axis=1)
)

```

This two-step chain removes both the row index (converting it to a default integer index) and clears any name attached to the columns axis.

## Complete Code Examples

The following examples demonstrate the progression from a standard transpose to an index-free result using the pandas-dev/pandas implementation.

### Example 1: Default Transpose Behavior

```python
import pandas as pd

df = pd.DataFrame(
    {"A": [1, 2, 3], "B": [4, 5, 6]},
    index=["row1", "row2", "row3"]
)

# Standard transpose preserves index as columns

df_T = df.T
print(df_T)

```

**Output:**

```

     row1  row2  row3
A        1     2     3
B        4     5     6

```

The original index `["row1", "row2", "row3"]` becomes the column headers.

### Example 2: Transpose Without Original Index

```python

# Remove original index from transposed result

df_clean = df.T.reset_index(drop=True).rename_axis(None, axis=1)
print(df_clean)

```

**Output:**

```

   0  1  2
0  1  2  3
1  4  5  6

```

Both rows and columns now use default integer indexing, completely removing the `"row1"`, `"row2"`, `"row3"` labels.

### Example 3: Using the transpose() Method

```python

# Equivalent approach using the full method name

df_clean = df.transpose().reset_index(drop=True)

```

Both `df.T` and `df.transpose()` invoke the same underlying CPython implementation in [`pandas/core/frame.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/frame.py), so the choice between them is purely stylistic.

## Source Code Implementation Details

The pandas transpose operation relies on two key locations in the pandas-dev/pandas repository:

- **`pandas/core/frame.py#L3897`** — Contains the `transpose()` method implementation that handles the axis swap and metadata preservation.
- **`pandas/core/frame.py#L4083`** — Defines the `T` property, which acts as a shortcut returning `self.transpose()`.

These implementations confirm that the transpose operation itself does not support an `index=False` parameter. The index-free result is achieved by post-processing with `reset_index(drop=True)`, which is defined in the base pandas object architecture and works consistently across DataFrame operations.

## Summary

- **Default behavior**: Pandas transpose converts the original index into column labels, preserving all metadata.
- **Remove index**: Chain `.reset_index(drop=True)` after `.T` or `.transpose()` to replace the index with default integers.
- **Clean columns**: Use `.rename_axis(None, axis=1)` to remove the column axis name that holds the former index values.
- **Implementation**: Both `df.T` and `df.transpose()` call the same method in [`pandas/core/frame.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/frame.py), lines 3897 and 4083 respectively.

## Frequently Asked Questions

### What is the difference between df.T and df.transpose() in pandas?

There is no functional difference. According to the source code in [`pandas/core/frame.py`](https://github.com/pandas-dev/pandas/blob/main/pandas/core/frame.py), the `T` property at line 4083 simply returns `self.transpose()`. Both invoke the same underlying implementation at line 3897. The `.T` attribute provides a convenient shorthand for interactive use, while `.transpose()` offers explicit readability in production code.

### How do I transpose a DataFrame without keeping the original index as column names?

Use `df.T.reset_index(drop=True)`. The `reset_index(drop=True)` call generates a fresh integer index (0, 1, 2...) and discards the original index values instead of inserting them as a new column. If you also want to remove the column axis name, chain `.rename_axis(None, axis=1)`.

### Can I transpose a DataFrame in place without the index?

No. The `transpose()` method in pandas does not support an `inplace=True` parameter, nor does it support dropping the index during the operation. You must create a new DataFrame variable to store the result of `df.T.reset_index(drop=True)`. If memory efficiency is critical, consider assigning back to the original variable: `df = df.T.reset_index(drop=True)`.

### Why does pandas transpose preserve the index by default?

Pandas maintains index alignment as a core principle of data integrity. When you transpose data, the library assumes you want to keep the semantic meaning of your labels. The original index values often represent meaningful identifiers (dates, IDs, categories) that should persist as column headers after transposition. Removing the index requires an explicit opt-in via `reset_index()` to prevent accidental data loss.