我和几个DataFrames一起工作。其中一个有添加的列,还有一些删除的列。这两个列的第一列都是日期列,按时间顺序,df2取df1停止的位置。
df1:
day alice bob
8/11 0 0
8/25 2 5
9/1 2 0
df2:
day alice charlie
9/12 1 1
9/25 2 3
9/1 2 1
我想把它们结合起来,得到一个包含所有日期和所有列的DataFrame。
df3:
day alice bob charlie
8/11 0 0 0
8/25 2 5 0
9/1 2 0 0
9/12 1 0 1
9/25 2 0 3
9/1 2 0 1
当我将实际的2 DataFrames与pd.concat或pd附加相结合时,我会得到以下错误:
AssertionError: Number of manager items must equal union of block items
# manager items: 65, # tot_items: 66
不知道会有什么问题。同时,谢谢你,你太棒了。如果需要的话,我可以给你提供一个更充实的例子。
发布于 2020-05-07 04:43:35
解决办法是正确的:
df = pd.concat([df1,df2]).fillna(0)
但以下是错误:
AssertionError:管理项的数量必须等于块项的总和# manager项: 65,# tot_items: 66
这意味着有重复的列名,您可以验证它:
print (df1.loc[:, df1.columns.duplicated(keep=False)])
print (df2.loc[:, df2.columns.duplicated(keep=False)])
如果列中相同的值是可能的,则删除以下重复值:
df1 = df1.loc[:, ~df1.columns.duplicated()]
df2 = df2.loc[:, ~df2.columns.duplicated()]
df = pd.concat([df1,df2]).fillna(0)
发布于 2020-05-07 04:04:56
我认为这是可行的:
df3 = pd.concat([df1.set_index("day"), df2.set_index("day")]).fillna(value=0).reset_index()
发布于 2020-05-07 04:09:35
df1['charlie']=0
df2['bob']=0
df=pd.concat([df1,df2]).reset_index().drop(['index'],axis=1)
说明:您可以添加各个数据帧中缺少的列。现在,如果您连接(),就不会引发错误。
https://stackoverflow.com/questions/61649651
复制相似问题