2014-11-25 25 views
14

Ich habe ein Problem mit dem Hinzufügen von Spalten in Pandas. Ich habe DataFrame, dimensional ist nxk. Und im Prozess brauche ich Spalten mit dimensionalen mx1 hinzufügen, wobei m = [1, n], aber ich weiß nicht m.hinzufügen Spalten unterschiedliche Länge Pandas

Wenn ich versuche es tun:

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

Ergebnis:

AssertionError: Length of values does not match length of index 

Kann ich Spalten mit unterschiedlicher Länge hinzufügen?

Antwort

16

Verwendung concat und übergeben axis=1 und 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 Ich rollte Ihre Bearbeitung zurück, Ihr Vorschlag sollte eher ein Kommentar als eine Bearbeitung meiner Antwort sein, da Bearbeitungen verwendet werden sollten, um eine Antwort zu verbessern oder zu korrigieren, alternative Antworten nicht zu empfehlen – EdChum

+0

Ich dachte darüber nach Verbesserung. Wenn Sie denken, dass es eine Alternative ist, werde ich eine separate Antwort veröffentlichen. –

22

Wenn Sie akzeptierte Antwort verwenden, werden Sie Ihre Spaltennamen verlieren, wie in der akzeptierte Antwort Beispiel gezeigt, und in der documentation (Schwerpunkt beschrieben hinzugefügt):

Die resultierende Achse 0 markiert werden, ..., n - 1. Dies ist nützlich, wenn Sie verketten Objekte sind, wo die Verkettung Achse nicht hav tut e aussagekräftige Indizierungsinformationen.

Es scheint, dass Ihre Spaltennamen ('Name column') aussagekräftig sind.

Sie pandas.concat verwenden können, aber nichtignore_index (Standardwert von ignore_index ist false, so können Sie dieses Argument völlig übergehen):

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 

Beachten Sie, wie John D nicht über ein Alter oder ein Geschlecht.

Verwandte Themen