How to Swap Columns and Rows in Pandas with Examples

Pandas, a powerful Python library for data manipulation and analysis, offers convenient methods for exchanging columns and rows in DataFrames. This is often necessary when you want to view your data from a different perspective or prepare it for specific operations.

1. Swap Columns and Rows (Transposing).

  1. The primary method for swapping columns and rows in pandas is the `transpose()` method or the `T` attribute. Both achieve the same outcome:
    import pandas as pd
    
    def swap_df_columns_rows():
        # Create a sample DataFrame
        data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
        df = pd.DataFrame(data)
    
        print('\r\nOriginal df:')
        print(df)
    
        # Transpose using the transpose() method
        df_transposed = df.transpose()
    
        # Transpose using the T attribute
        df_transposed_t = df.T
    
        print('\r\ndf_transposed:')
        print(df_transposed)
    
        print('\r\ndf_transposed_t:')
        print(df_transposed_t)
    
    
    if __name__ == "__main__":
        swap_df_columns_rows()
  2. Output.

    Original df:
       col1  col2  col3
    0     1     4     7
    1     2     5     8
    2     3     6     9
    
    df_transposed:
          0  1  2
    col1  1  2  3
    col2  4  5  6
    col3  7  8  9
    
    df_transposed_t:
          0  1  2
    col1  1  2  3
    col2  4  5  6
    col3  7  8  9
  3. As you can see, both `df_transposed` and `df_transposed_t` represent the transposed version of the original DataFrame, with former column names becoming new row indices and former row values becoming column values.

2. Important Considerations.

  1. The `transpose()` method and `T` attribute do not modify the original DataFrame, they return a new transposed DataFrame. The behavior of these methods is equivalent, and you can choose whichever one you find more readable or convenient in your code.
  2. If you want to create a copy of the transposed DataFrame to ensure changes don’t affect the original, use `df_transposed.copy()` or `df.T.copy()`.
    import pandas as pd
    
    def test_df_copy():
        # Create a sample DataFrame (copyable)
        data = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
        df = pd.DataFrame(data)
    
        # Transpose using the transpose() method and create a copy
        df_transposed_copy = df.transpose().copy()
    
        # Modify the copy
        df_transposed_copy.iloc[1, 0] = 100  # Modify the second row, first column
    
        print('\r\nOriginal df:')
        print(df)  # Original DataFrame remains unchanged
    
        print('\r\ndf_transposed_copy:')
        print(df_transposed_copy)
    
    if __name__ == "__main__":
        test_df_copy()
  3. Output.
    Original df:
       col1  col2  col3
    0     1     4     7
    1     2     5     8
    2     3     6     9
    
    df_transposed_copy:
            0  1  2
    col1    1  2  3
    col2  100  5  6
    col3    7  8  9

3. Additional Methods for Specific Transpositions.

  1. While `transpose()` and `T` provide the core functionality for exchanging columns and rows, pandas offer other methods for more nuanced transpositions:
  2. stack(): Reshapes a level of the MultiIndex into a column.
  3. unstack(): Opposite of stack(), pivots a column back into the MultiIndex.
  4. pivot_table(): Creates a concise statistical summary of the DataFrame.

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.