HOWTO · Pandas

Como Criar uma Coluna Vazia em Pandas DataFrame

Podemos adicionar uma coluna vazia ao DataFrame em Pandas usando métodos simples de atribuição de operador, reindex(), assign() e insert().

Nesta página

Para adicionar uma coluna vazia a um DataFrame existente do pandas em Python, use df["NewColumn"] = "" para inserir texto em branco ou df["NewColumn"] = float("nan") para representar valores ausentes (NaN). Ambas as opções preservam as linhas e as outras colunas existentes. Uma string vazia é um valor de texto, então escolha a representação adequada aos cálculos e filtros que você fará depois.

Use reindex() para adicionar várias colunas, assign() para retornar um DataFrame com novas colunas nomeadas ou insert() para controlar a posição. Os exemplos precisam do pandas e do NumPy.

Criar uma coluna vazia no pandas com atribuição simples

Atribuir um valor escalar a uma nova coluna repete esse valor em todas as linhas existentes. A atribuição altera df diretamente e adiciona a nova coluna à direita. Se o nome já existir, a atribuição substitui o conteúdo da coluna; use um nome novo para preservar os dados.

Este exemplo compara uma string vazia, o marcador de valor ausente do NumPy e uma Series vazia do pandas:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})

df["Empty_1"] = ""
df["Empty_2"] = np.nan
df["Empty_3"] = pd.Series()

print(df)

Saída:

       Date  Income  Expenses Empty_1  Empty_2 Empty_3
0  April-20      10         3              NaN     NaN
1  April-21      20         8              NaN     NaN
2  April-22      10         4              NaN     NaN
3  April-23      15         5              NaN     NaN
4  April-24      10         6              NaN     NaN
5  April-25      12        10              NaN     NaN

Empty_1 contém strings vazias, enquanto Empty_2 contém NaN. Ao atribuir uma Series, o pandas alinha os rótulos do índice dela aos rótulos das linhas do DataFrame. Como a Series vazia não tem rótulos correspondentes, Empty_3 também fica preenchida com valores ausentes.

Como alternativa com tipo explícito, use df["NewColumn"] = pd.Series(index=df.index, dtype="float64"). Incluir df.index deixa explícito o alinhamento desejado das linhas. Para selecionar valores ausentes depois, use df["NewColumn"].isna() em vez de compará-los com NaN; strings vazias exigem uma comparação separada com "".

Usar o método pandas.DataFrame.reindex() para adicionar uma coluna vazia

O método pandas.DataFrame.reindex() retorna um DataFrame com os rótulos e a ordem de colunas solicitados. Por padrão, novos rótulos recebem valores ausentes. Atenção: columns especifica a lista completa de colunas resultante, não apenas as adições.

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})


column_names = ["Empty_1", "Empty_2", "Empty_3"]

df = df.reindex(columns=column_names)
print(df)

Saída:

   Empty_1  Empty_2  Empty_3
0      NaN      NaN      NaN
1      NaN      NaN      NaN
2      NaN      NaN      NaN
3      NaN      NaN      NaN
4      NaN      NaN      NaN
5      NaN      NaN      NaN

Neste caso, o resultado mantém os seis rótulos de linha, mas remove Date, Income e Expenses. Atribuir esse resultado novamente a df substitui a referência original.

Para manter os dados existentes, comece com df.columns.tolist() e acrescente os novos nomes. Assim, a ordem das colunas existentes é preservada e as novas ficam à direita. Armazene o DataFrame retornado, pois esse método não altera o objeto original diretamente. Execute este exemplo:

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})

df = df.reindex(columns=df.columns.tolist() + ["Empty_1", "Empty_2", "Empty_3"])
print(df)

Saída:

       Date  Income  Expenses  Empty_1  Empty_2  Empty_3
0  April-20      10         3      NaN      NaN      NaN
1  April-21      20         8      NaN      NaN      NaN
2  April-22      10         4      NaN      NaN      NaN
3  April-23      15         5      NaN      NaN      NaN
4  April-24      10         6      NaN      NaN      NaN
5  April-25      12        10      NaN      NaN      NaN

As datas, a renda e as despesas originais permanecem, seguidas por três colunas com NaN. Escolha nomes que ainda não existam para evitar solicitar rótulos duplicados.

Adicionar uma coluna vazia a um DataFrame com pandas.DataFrame.assign()

O método pandas.DataFrame.assign() retorna um DataFrame com uma ou mais colunas nomeadas. Cada argumento nomeado define uma coluna e fornece seus valores. Mantenha o objeto retornado, como em df = df.assign(...), ou armazene-o com outro nome para preservar o DataFrame original.

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})

df = df.assign(Empty_1="", Empty_2=np.nan)
print(df)

Saída:

       Date  Income  Expenses Empty_1  Empty_2
0  April-20      10         3              NaN
1  April-21      20         8              NaN
2  April-22      10         4              NaN
3  April-23      15         5              NaN
4  April-24      10         6              NaN
5  April-25      12        10              NaN

Empty_1 contém strings vazias; somente Empty_2 contém NaN. As colunas existentes são mantidas. Assim como na atribuição direta, especificar o nome de uma coluna existente substitui essa coluna no DataFrame retornado.

Adicionar uma coluna vazia a um DataFrame com pandas.DataFrame.insert()

Use pandas.DataFrame.insert() quando a posição da coluna for importante. A chamada tem a forma df.insert(loc, column, value): loc é a posição da coluna, começando em zero; column é o novo rótulo; e value é obrigatório. Forneça "" para texto em branco ou np.nan para valores ausentes.

A posição deve estar entre 0 e len(df.columns), inclusive; o limite superior adiciona a coluna ao final. Por padrão, inserir um rótulo existente gera um erro. Passar allow_duplicates=True permite rótulos duplicados, mas pode tornar ambígua a seleção de colunas posteriormente.

Ao contrário de assign() e reindex(), insert() altera df diretamente e retorna None. Não escreva df = df.insert(...).

O exemplo a seguir adiciona duas colunas ao final:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})
df.insert(3, "Empty_1", "")
df.insert(4, "Empty_2", np.nan)
print(df)

Saída:

       Date  Income  Expenses Empty_1  Empty_2
0  April-20      10         3              NaN
1  April-21      20         8              NaN
2  April-22      10         4              NaN
3  April-23      15         5              NaN
4  April-24      10         6              NaN
5  April-25      12        10              NaN

Empty_1 ocupa a posição 3 e contém strings vazias. Depois dessa inserção, a posição 4 fica disponível para Empty_2, que contém NaN. Para colocar uma coluna primeiro, use loc=0; as colunas existentes passam para a direita sem que seus valores sejam alterados.