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.