我正在尝试根据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
如何解决这个问题?
答案 0 :(得分:16)
如果满足以下两个条件,我认为会发生此错误:
(df1.columns == df2.columns)
是False
基本上,如果您使用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)
不幸的是,源文件已经不可用,因此我无法在您的案例中检查我的解决方案。在我的情况下,错误发生在:
ID
和id
列,然后我将其转换为小写,因此它们会变得相同)这是一个给出错误的例子:
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
删除/重命名其中一列使此代码有效。