2014-11-25 155 views
14

我在添加熊猫列方面存在问题。 我有DataFrame,尺寸是nxk。在过程中,我需要添加维度为mx1的列,其中m = [1,n],但我不知道m。添加不同长度的熊猫列

当我试图做到这一点:

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

结果:

AssertionError: Length of values does not match length of index 

我可以添加列不同长度?

回答

16

使用CONCAT并通过axis=1ignore_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我把你的编辑回来了,你的建议应该是一个评论,而不是我的答案的编辑,因为编辑应该用来改善或纠正一个答案,而不是建议替代答案 – EdChum 2015-10-28 20:45:10

+0

我认为它是一个改进。如果你认为这是一个替代方案,我会发布一个单独的答案。 – 2015-10-29 00:36:29

22

如果使用公认的答案,你会失去你的列名,如图接受的答案例如,并在documentation(重点描述加):

所得轴将被标记为0,...,N - 1。如果你在哪里级联轴确实 HAV级联对象,这是有用e有意义的索引信息。

它看起来像你的列名('Name column')是有意义的。

您可以使用pandas.concat,但ignore_index(的ignore_index默认值是false,这样你就可以忽略这样的说法完全):

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 

注意约翰·d怎么没有一个时代或性别。