我试图基于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])
Run Code Online (Sandbox Code Playgroud)
我收到错误:
AssertionError: Number of manager items must equal union of block items
# manager items: 20, # tot_items: 21
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
phi*_*686 23
我相信如果满足以下两个条件,则会发生此错误:
(df1.columns == df2.columns)是False基本上,如果你concat的列dataframes [A,B,C]并且[B,C,D]它可以工作,使一个系列为每个不同的列名.因此,如果我尝试加入第三个数据帧,[B,B,C]它就不知道要追加哪个列,最终会得到比它认为需要的更少的不同列.
如果您的数据帧是这样的,df1.columns == df2.columns那么无论如何它都会起作用.所以,你可以加入[B,B,C]到[B,B,C],但不能[C,B,B],因为如果列是相同的,它可能只是使用整数索引或东西.
这里的答案没有解决我的问题,但这个答案解决了。
问题是一个或两个 DataFrame 中的列重复。
这是一个重复的列修复(根据上面的答案):
df = df.loc[:,~df.columns.duplicated()]
Run Code Online (Sandbox Code Playgroud)
您可以通过“手动”连接来解决此问题,在这种情况下,您的
list_of_dfs = [df_a, df_b]
Run Code Online (Sandbox Code Playgroud)
而不是运行
giant_concat_df = pd.concat(list_of_dfs,0)
Run Code Online (Sandbox Code Playgroud)
您可以使用将所有数据框转换为字典列表,然后从这些列表中创建一个新数据框(与链合并)
from itertools import chain
list_of_dicts = [cur_df.T.to_dict().values() for cur_df in list_of_dfs]
giant_concat_df = pd.DataFrame(list(chain(*list_of_dicts)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12851 次 |
| 最近记录: |