Deseja realmente uma coluna contendo cadeias vazias ou melhor N/A?
filmor
Respostas:
420
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
012123234>>> df["C"]="">>> df["D"]= np.nan
>>> df
A B C D
012NaN123NaN234NaN
Esta resposta acabou de criar novas linhas para mim.
logicbloke
@logicbloke você pode dar um exemplo de onde isso está acontecendo?
craymichael
@craymichael Já faz um tempo, mas acredito que tinha colunas indexadas em número sem nomes e com linhas nomeadas e isso acabou de criar uma nova linha no final.
logicbloke
1
Se o dfestá vazia, você pode querer usar df['new'] = pd.Series() (ver minha resposta abaixo)
Carsten
como adicionar várias colunas vazias?
M. Mariscal
46
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 axispalavra - chave em vez de atribuir explicitamente a columnsou rows.
Exemplo para version >= 0.20.0exclui o DataFrame e adiciona as novas colunas como linhas. Exemplo para version < 0.20.0funciona bem na versão Pandas0.24.1
Lalo
@emunsing Ao procurar uma resposta para essa pergunta, achei sua resposta útil. No início, no entanto, não foi trabalhar para mim como Pandas requer , axis=1no 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.
Griff
@Griff - Atualizei minha resposta para ser mais preciso e explícito sobre problemas de compatibilidade de versões. Obrigado por destacar isso.
emunsing 26/11/19
35
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
Mais precisamente, as colunas serão adicionadas com NaNs.
Broccoli2000
19
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 DFexemplo demonstrado pelo @DSM:
df = pd.DataFrame({"A":[1,2,3],"B":[2,3,4]})
df
Out[18]:
A B
012123234
df.assign(C="",D=np.nan)Out[21]:
A B C D
012NaN123NaN234NaN
Observe que isso retorna uma cópia com todas as colunas anteriores, juntamente com as recém-criadas. Para que o original DFseja modificado de acordo, use-o como: df = df.assign(...)pois ele não suporta a inplaceoperação atualmente.
A resposta do @ emunsing é muito legal para adicionar várias colunas, mas não consegui fazê-lo funcionar no python 2.7. Em vez disso, achei que isso funciona:
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['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
N/A
?Respostas:
Se bem entendi, a tarefa deve preencher:
fonte
df
está vazia, você pode querer usardf['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 umaaxis
palavra - chave em vez de atribuir explicitamente acolumns
ourows
.Aqui está um exemplo de adição de várias colunas:
ou
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 :)
fonte
version >= 0.20.0
exclui o DataFrame e adiciona as novas colunas como linhas. Exemplo paraversion < 0.20.0
funciona bem na versão Pandas0.24.1
, axis=1
noversion = 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 é:
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
c e d serão adicionados como colunas com células em branco
fonte
Começando com
v0.16.0
,DF.assign()
poderia ser usado para atribuir novas colunas ( únicas / múltiplas ) a aDF
. Essas colunas são inseridas em ordem alfabética no final doDF
.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: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 ainplace
operação atualmente.fonte
Eu gosto:
Se você possui um quadro de dados vazio, esta solução garante que nenhuma nova linha contendo apenas
NaN
seja adicionada.Se
dtype
não for especificado, as versões mais recentes do Pandas produzirão aDeprecationWarning
.fonte
se você deseja adicionar o nome da coluna de uma lista
fonte
A resposta do @ emunsing é muito legal para adicionar várias colunas, mas não consegui fazê-lo funcionar no python 2.7. Em vez disso, achei que isso funciona:
fonte
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)
Abordagem 2 (para criar 64 colunas adicionais com nomes de colunas de 1 a 64)
fonte
Você pode fazer
fonte
Pode-se usar
df.insert(index_to_insert_at, column_header, init_value)
para inserir nova coluna em um índice específico.A instrução acima inserirá uma coluna vazia após a primeira coluna.
fonte