熊猫concat失败

时间:2016-02-01 18:44:45

标签: python pandas

我正在尝试根据foll连接数据帧。 2个csv文件:

df_a:https://www.dropbox.com/s/slcu7o7yyottujl/df_current.csv?dl=0

df_b:https://www.dropbox.com/s/laveuldraurdpu1/df_climatology.csv?dl=0

这两个列具有相同的数量和名称。但是,当我这样做时:

pandas.concat([df_a, df_b])

我收到错误:

AssertionError: Number of manager items must equal union of block items
# manager items: 20, # tot_items: 21

如何解决这个问题?

3 个答案:

答案 0 :(得分:16)

如果满足以下两个条件,我认为会发生此错误:

  1. 数据框具有不同的列。 (即(df1.columns == df2.columns)False
  2. 列具有重复值。
  3. 基本上,如果您使用concat[A,B,C][B,C,D]数据集,则可以为每个不同的列名制作一个系列。因此,如果我尝试加入第三个数据帧[B,B,C],它就不知道要追加哪个列,最终会得到比它认为需要的更少的不同列。

    如果您的数据框架是df1.columns == df2.columns,那么无论如何它都会起作用。因此,您可以将[B,B,C]加入[B,B,C],但不加入[C,B,B],就像列相同时一样,它可能只使用整数索引或其他内容。

答案 1 :(得分:5)

这里的答案不能解决我的问题,但this答案可以解决。

问题是一个或两个数据框中的重复列。

这是重复的列修复程序(根据上面的答案):

df = df.loc[:,~df.columns.duplicated()]

答案 2 :(得分:1)

不幸的是,源文件已经不可用,因此我无法在您的案例中检查我的解决方案。在我的情况下,错误发生在:

  1. 数据框有两列具有相同的名称(我已经有IDid列,然后我将其转换为小写,因此它们会变得相同)
  2. 同名列的值类型不同
  3. 这是一个给出错误的例子:

    df1 = pd.DataFrame(data=[
        ['a', 'b', 'id', 1],
        ['a', 'b', 'id', 2]
    ], columns=['A', 'B', 'id', 'id'])
    
    df2 = pd.DataFrame(data=[
        ['b', 'c', 'id', 1],
        ['b', 'c', 'id', 2]
    ], columns=['B', 'C', 'id', 'id'])
    pd.concat([df1, df2])
    >>> AssertionError: Number of manager items must equal union of block items
     # manager items: 4, # tot_items: 5
    

    删除/重命名其中一列使此代码有效。