2014-11-25 17 views
14

Ho un problema con l'aggiunta di colonne in panda. Ho DataFrame, dimensional è nxk. E nel processo ho bisogno di aggiungere colonne con dimensionale mx1, dove m = [1, n], ma non lo so m.aggiungi colonne di lunghezza diversa panda

Quando provo farlo:

df['Name column'] = data  
# type(data) = list 

risultato:

AssertionError: Length of values does not match length of index 

Posso aggiungere colonne con la lunghezza differente?

risposta

16

Usa concat e superare axis=1 e ignore_index=True:

In [38]: 

import numpy as np 
df = pd.DataFrame({'a':np.arange(5)}) 
df1 = pd.DataFrame({'b':np.arange(4)}) 
print(df1) 
df 
    b 
0 0 
1 1 
2 2 
3 3 
Out[38]: 
    a 
0 0 
1 1 
2 2 
3 3 
4 4 
In [39]: 

pd.concat([df,df1], ignore_index=True, axis=1) 
Out[39]: 
    0 1 
0 0 0 
1 1 1 
2 2 2 
3 3 3 
4 4 NaN 
+0

@TheRedPea Ho eseguito il rollback della modifica, il tuo suggerimento avrebbe dovuto essere un commento piuttosto che una modifica della mia risposta in quanto le modifiche dovevano essere utilizzate per migliorare o correggere una risposta, non per suggerire risposte alternative – EdChum

+0

miglioramento. Se pensi che sia un'alternativa, posterò una risposta separata. –

22

Se si utilizza risposta accettata, perderai i tuoi nomi di colonna, come indicato nella risposta accettata esempio, e descritti nel documentation (enfasi aggiunto):

L'asse risultante sarà etichettato 0, ..., n - 1. Questo è utile se si tratta di oggetti concatenare in cui l'asse di concatenazione non non HAV e informazioni di indicizzazione significative.

Sembra che i nomi delle colonne ('Name column') siano significativi.

È possibile utilizzare pandas.concat, ma non lo fanno ignore_index (valore predefinito di ignore_index è false, in modo da poter omettere che l'argomento del tutto):

import pandas 

# Note these columns have 3 rows of values: 
original = pandas.DataFrame({ 
    'Age':[10, 12, 13], 
    'Gender':['M','F','F']}) 

# Note this column has 4 rows of values: 
additional = pandas.DataFrame({ 
    'Name': ['Nate A', 'Jessie A', 'Daniel H', 'John D'] 
}) 

new = pandas.concat([original, additional], axis=1) 
# Identical: 
# new = pandas.concat([original, additional], ignore_index=False, axis=1) 

print(new.head()) 

#   Age  Gender  Name 
#0   10    M  Nate A 
#1   12    F Jessie A 
#2   13    F Daniel H 
#3   NaN   NaN  John D 

Si noti come John D non ha un Age o un genere.

Problemi correlati