首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas concat产生ValueError:平面形状未对齐

Pandas concat产生ValueError:平面形状未对齐
EN

Stack Overflow用户
提问于 2014-10-07 07:21:31
回答 6查看 84.6K关注 0票数 77

在pandas中,我尝试连接一组数据帧,并收到以下错误:

ValueError: Plan shapes are not aligned

我对.concat()的理解是,它会在列相同的地方加入,但对于那些找不到的列,它会用NA填充。这里似乎不是这样。

下面是concat语句:

dfs = [npo_jun_df, npo_jul_df,npo_may_df,npo_apr_df,npo_feb_df]
alpha = pd.concat(dfs)
EN

回答 6

Stack Overflow用户

发布于 2014-12-11 07:40:07

如果它有帮助,当我尝试连接两个数据帧时,我也遇到了这个错误(在撰写本文时,这是除了源代码之外,我在google上唯一能找到的相关命中)。

我不知道这个答案是否会解决OP的问题(因为他/她没有发布足够的信息),但对我来说,这是因为我试图用列标题( concat ['A', 'B', 'B', 'C']?)具有列['A', 'B']的dataframe df2。可以理解的是,这种复制导致大熊猫摇晃了一下。将df1更改为['A', 'B', 'C'] (即删除其中一个重复的列),一切都会正常工作。

票数 150
EN

Stack Overflow用户

发布于 2016-01-09 07:23:45

我最近也收到了这条消息,我发现像上面的用户@jason@user3805082一样,在我试图concat的数百个数据帧中,有几个列重复,每个数据帧都有几十个神秘的变量名。手动搜索重复项是不现实的。

如果其他人有同样的问题,我写了下面的函数,它可能会有所帮助。

def duplicated_varnames(df):
    """Return a dict of all variable names that 
    are duplicated in a given dataframe."""
    repeat_dict = {}
    var_list = list(df) # list of varnames as strings
    for varname in var_list:
        # make a list of all instances of that varname
        test_list = [v for v in var_list if v == varname] 
        # if more than one instance, report duplications in repeat_dict
        if len(test_list) > 1: 
            repeat_dict[varname] = len(test_list)
    return repeat_dict

然后,您可以迭代该字典,以报告有多少重复的变量,删除重复的变量,或以某种系统的方式重命名它们。

票数 12
EN

Stack Overflow用户

发布于 2017-08-21 12:07:49

编写了一个小函数来连接重复的列名。函数关心排序如果原始数据帧未排序,则输出将是排序的数据帧。

def concat_duplicate_columns(df):
    dupli = {}
    # populate dictionary with column names and count for duplicates 
    for column in df.columns:
        dupli[column] = dupli[column] + 1 if column in dupli.keys() else 1
    # rename duplicated keys with °°° number suffix
    for key, val in dict(dupli).items():
        del dupli[key]
        if val > 1:
            for i in range(val):
                dupli[key+'°°°'+str(i)] = val
        else: dupli[key] = 1
    # rename columns so that we can now access abmigous column names
    # sorting in dict is the same as in original table
    df.columns = dupli.keys()
    # for each duplicated column name
    for i in set(re.sub('°°°(.*)','',j) for j in dupli.keys() if '°°°' in j):
        i = str(i)
        # for each duplicate of a column name
        for k in range(dupli[i+'°°°0']-1):
            # concatenate values in duplicated columns
            df[i+'°°°0'] = df[i+'°°°0'].astype(str) + df[i+'°°°'+str(k+1)].astype(str)
            # Drop duplicated columns from which we have aquired data
            df = df.drop(i+'°°°'+str(k+1), 1)
    # resort column names for proper mapping
    df = df.reindex_axis(sorted(df.columns), axis = 1)
    # rename columns
    df.columns = sorted(set(re.sub('°°°(.*)','',i) for i in dupli.keys()))
    return df
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26226343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档