two name inner concatenate columns column python pandas concat

python - name - Pandas concat da error ValueError: las formas del plan no están alineadas



python dataframe concatenate two columns (4)

Soy bastante nuevo en pandas, estoy intentando concatenar un conjunto de marcos de datos y recibo este error:

ValueError: Plan shapes are not aligned

Mi entendimiento de .concat() es que se unirá donde las columnas son las mismas, pero para aquellas que no pueden encontrar se llenará con NA. Este no parece ser el caso aquí.

Aquí está la declaración concat:

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


En caso de que ayude, también he cometido este error cuando intenté concatenar dos marcos de datos (y en el momento de escribir este es el único resultado relacionado que puedo encontrar en Google que no sea el código fuente).

No sé si esta respuesta habría resuelto el problema del OP (ya que no publicó la información suficiente), pero para mí, esto se debió a que intenté concatear el marco de datos df1 con las columnas [''A'', ''B'', ''B'', ''C''] (ver los encabezados de columna duplicados?) Con el marco de datos df2 con las columnas [''A'', ''B''] . Comprensiblemente la duplicación causó que los pandas lanzaran un tambaleo. Cambie df1 a [''A'', ''B'', ''C''] (es decir, elimine una de las columnas duplicadas) y todo funciona bien.


Escribió una pequeña función para concatenar nombres de columnas duplicados. La función se preocupa por la clasificación si el marco de datos original no está clasificado, la salida será ordenada.

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


También recibí recientemente este mensaje, y encontré como usuario jason y arriba, que tenía columnas duplicadas en varios de los cientos de marcos de datos que intentaba concat , cada uno con docenas de nombres enigmáticos. La búsqueda manual de duplicados no era práctica.

En caso de que alguien más tenga el mismo problema, escribí la siguiente función que podría ayudar.

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

Luego, puede repetir ese dictado para informar cuántos duplicados hay, eliminar las variables duplicadas o cambiarles el nombre de alguna manera sistemática.


pip install pandas --upgrade arregló esto para mí.