1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

[Python] specify number of spaces between pandas DataFrame columns when printing

Discussão em 'Python' iniciado por Stack, Setembro 10, 2025.

  1. Stack

    Stack Membro Participativo

    When you print a pandas DataFrame, which calls DataFrame.to_string, it normally inserts a minimum of 2 spaces between the columns. For example, this code

    import pandas as pd

    df = pd.DataFrame( {
    "c1" : ("a", "bb", "ccc", "dddd", "eeeeee"),
    "c2" : (11, 22, 33, 44, 55),
    "a3235235235": [1, 2, 3, 4, 5]
    } )
    print(df)


    outputs

    c1 c2 a3235235235
    0 a 11 1
    1 bb 22 2
    2 ccc 33 3
    3 dddd 44 4
    4 eeeeee 55 5


    which has a minimum of 2 spaces between each column.

    I am copying DataFarames printed on the console and pasting it into documents, and I have received feedback that it is hard to read: people would like more spaces between the columns.

    Is there a standard way to do that?

    I see no option in either DataFrame.to_string or pandas.set_option.

    I have done a web search, and not found an answer. This question asks how to remove those 2 spaces, while this question asks why sometimes only 1 space is between columns instead of 2 (I also have seen this bug, hope someone answers that question).

    My hack solution is to define a function that converts a DataFrame's columns to type str, and then prepends each element with a string of the specified number of spaces.

    This code (added to the code above)

    def prependSpacesToColumns(df: pd.DataFrame, n: int = 3):
    spaces = ' ' * n

    # ensure every column name has the leading spaces:
    if isinstance(df.columns, pd.MultiIndex):
    for i in range(df.columns.nlevels):
    levelNew = [spaces + str(s) for s in df.columns.levels]
    df.columns.set_levels(levelNew, level = i, inplace = True)
    else:
    df.columns = spaces + df.columns

    # ensure every element has the leading spaces:
    df = df.astype(str)
    df = spaces + df

    return df

    dfSp = prependSpacesToColumns(df, 3)
    print(dfSp)


    outputs

    c1 c2 a3235235235
    0 a 11 1
    1 bb 22 2
    2 ccc 33 3
    3 dddd 44 4
    4 eeeeee 55 5


    which is the desired effect.

    But I think that pandas surely must have some builtin simple standard way to do this. Did I miss how?

    Also, the solution needs to handle a DataFrame whose columns are a MultiIndex. To continue the code example, consider this modification:

    idx = (("Outer", "Inner1"), ("Outer", "Inner2"), ("Outer", "a3235235235"))
    df.columns = pd.MultiIndex.from_tuples(idx)

    Continue reading...

Compartilhe esta Página