Respostas:
Se bem entendi, a tarefa deve preencher:
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
A B
0 1 2
1 2 3
2 3 4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN
df
está vazia, você pode querer usar df['new'] = pd.Series()
(ver minha resposta abaixo)
Para adicionar à resposta do DSM e desenvolver essa pergunta associada , dividiria a abordagem em dois casos:
Adicionando uma única coluna: Basta atribuir valores vazios às novas colunas, por exemplo df['C'] = np.nan
Adicionando várias colunas: sugiro usar o .reindex(columns=[...])
método pandas para adicionar as novas colunas ao índice de colunas do quadro de dados. Isso também funciona para adicionar várias novas linhas com .reindex(rows=[...])
. Observe que as versões mais recentes do Pandas (v> 0.20) permitem especificar uma axis
palavra - chave em vez de atribuir explicitamente a columns
ou rows
.
Aqui está um exemplo de adição de várias colunas:
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
ou
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
Você também pode sempre concatenar um novo quadro de dados (vazio) para o quadro de dados existente, mas isso não parece tão pitônico para mim :)
version >= 0.20.0
exclui o DataFrame e adiciona as novas colunas como linhas. Exemplo para version < 0.20.0
funciona bem na versão Pandas0.24.1
, axis=1
no version = 0.25
. Tentei modificar sua resposta para incluir a versão atualizada, mas fui rejeitado por @kenlukas e @il_raffa. Espero que todos que lutam para entender por que sua resposta não está funcionando para eles - como eu estava - pelo menos se deparem com esse comentário.
uma solução ainda mais simples é:
df = df.reindex(columns = header_list)
onde "header_list" é uma lista dos cabeçalhos que você deseja que apareça.
qualquer cabeçalho incluído na lista que ainda não foi encontrado no quadro de dados será adicionado com as células em branco abaixo.
então se
header_list = ['a','b','c', 'd']
c e d serão adicionados como colunas com células em branco
Começando com v0.16.0
, DF.assign()
poderia ser usado para atribuir novas colunas ( únicas / múltiplas ) a a DF
. Essas colunas são inseridas em ordem alfabética no final do DF
.
Isso se torna vantajoso em comparação com a atribuição simples nos casos em que você deseja executar uma série de operações encadeadas diretamente no dataframe retornado.
Considere o mesmo DF
exemplo demonstrado pelo @DSM:
df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
A B
0 1 2
1 2 3
2 3 4
df.assign(C="",D=np.nan)
Out[21]:
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN
Observe que isso retorna uma cópia com todas as colunas anteriores, juntamente com as recém-criadas. Para que o original DF
seja modificado de acordo, use-o como: df = df.assign(...)
pois ele não suporta a inplace
operação atualmente.
se você deseja adicionar o nome da coluna de uma lista
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
O código abaixo aborda a pergunta "Como adiciono n número de colunas vazias ao meu quadro de dados existente". No interesse de manter soluções para problemas semelhantes em um só lugar, estou adicionando aqui.
Abordagem 1 (para criar 64 colunas adicionais com nomes de colunas de 1 a 64)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists
Abordagem 2 (para criar 64 colunas adicionais com nomes de colunas de 1 a 64)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
Você pode fazer
df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe
Pode-se usar df.insert(index_to_insert_at, column_header, init_value)
para inserir nova coluna em um índice específico.
cost_tbl.insert(1, "col_name", "")
A instrução acima inserirá uma coluna vazia após a primeira coluna.
N/A
?