添加不同长度的pandas列

时间:2014-11-25 12:16:18

标签: python pandas

我在pandas中添加列时遇到问题。 我有DataFrame,维度是nxk。在过程中,我需要添加维度为mx1的列,其中m = [1,n],但我不知道m。

当我尝试这样做时:

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

结果:

AssertionError: Length of values does not match length of index   

我可以添加不同长度的列吗?

4 个答案:

答案 0 :(得分:35)

如果您使用已接受的答案,则会丢失您的列名称,如接受的答案示例所示,并在documentation中进行了描述(重点已添加):

  

生成的轴将标记为0,...,n - 1.如果您连接的对象连接轴具有有意义的索引信息,则此选项非常有用。

列名('Name column')看起来对原始海报/原始问题有意义。

要保存列名称,请使用pandas.concat,但不要 ignore_index(默认值ignore_indexfalse;所以你可以完全省略那个论点):

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

注意John D没有年龄或性别。

答案 1 :(得分:30)

使用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

答案 2 :(得分:2)

我们可以将不同大小的列表值添加到DataFrame。

  

实施例

a = [0,1,2,3]
b = [0,1,2,3,4,5,6,7,8,9]
c = [0,1]
  

查找所有列表的长度

la,lb,lc = len(a),len(b),len(c)
  

我知道最大长度是' B'列出并调整A和B列表的大小

a.extend(['']*6)
c.extend(['']*8)
  

现在所有列表都是相同的长度并创建数据帧

pd.DataFrame({'A':a,'B':b,'C':c}) 
  

最终输出

   A  B  C
0  1  0  1
1  2  1   
2  3  2   
3     3   
4     4   
5     5   
6     6   
7     7   
8     8   
9     9  

答案 3 :(得分:1)

我遇到了同样的问题,两个不同的数据框,并且没有共同的专栏。我只需要将它们彼此放置在一个csv文件中。

  • 合并: 在这种情况下,“合并”无效。甚至向两个dfs添加一个临时列,然后将其删除。因为此方法使两个df具有相同的长度。因此,它重复较短数据帧的行以匹配较长数据帧的长度。
  • Concat: The Red Pea的想法对我不起作用。它只是将较短的df附加到较长的df(逐行)上,而在较短的df的列上方保留一个空列(NaNs)。
  • 解决方案:您需要执行以下操作:
df1 = df1.reset_index()
df2 = df2.reset_index()
df = [df1, df2]
df_final = pd.concat(df, axis=1)

df_final.to_csv(filename, index=False)

这样,您会看到dfs彼此相邻(按列),每个都有自己的长度。