Tempo di lettura stimato: 3 minuti
State cercando di imparare python e nel frattempo vi imbattete in questo errore e cercate di capire perché si verifica?
In sostanza, ciò si verifica quando si dispone di più frame di dati e nel processo di scrittura del programma si cerca di utilizzare i frame di dati e i relativi dati, ma c'è una discrepanza nel numero di elementi in ciascuno di essi che il programma non può elaborare finché non viene risolta.
Uno scenario comune in cui ciò può accadere è quando si uniscono frame di dati o si suddividono i dati, come illustrato di seguito.
Scenario 1 - Unire i frame di dati
Quando si ha df1[['a']] = df2, si assegnano i valori a sinistra del segno di uguale a quelli a destra.
Se guardiamo il lato destro, ci sono tre colonne, mentre il lato sinistro ne ha una.
Di conseguenza, appare l'errore "ValueError: Le colonne devono avere la stessa lunghezza della chiave", come indicato di seguito.
import pandas as pd
list1 = [1,2,3]
list2 = [[4,5,6],[7,8,9]]
df1 = pd.DataFrame(list1,columns=['column1'])
df2 = pd.DataFrame(list2,columns=['column2','column3','column4'])
df1[['a']] = df2
Il codice sopra riportato genera il seguente errore:
L'obiettivo è quello di avere tutte le colonne del lato destro accanto alle colonne del lato sinistro, come segue:
Abbiamo fatto in modo che entrambi i lati siano uguali per quanto riguarda il numero di colonne da mostrare da df2
In sostanza, prendiamo la colonna da DF1 e poi inseriamo le tre colonne da DF2.
Le columna, columnb, columnc qui sotto corrispondono alle tre colonne di DF2 e memorizzeranno i dati da esse provenienti.
La soluzione per questo problema è: df1['columna','columnb','columnc']] = df2
stampa (df1)
Scenario 2 - Suddivisione dei dati
Può capitare di avere un elenco in python e di dover dividere i valori dell'elenco in colonne separate.
new_list1 = ['1 2 3']
df1_newlist = pd.DataFrame(new_list1,columns=['column1'])
Nel caso precedente, abbiamo creato un elenco con tre valori che fanno parte di una stringa. Qui si vuole creare una nuova colonna con il codice seguente:
df1_newlist[["column1"]] = df1_newlist["column1"].str.split(" ", expand=True) #Splitting based on the space between the values.
print(df1_newlist)
Quando si esegue quanto sopra, viene generato il seguente errore di valore:
L'errore è dovuto al fatto che la logica prevede tre valori da suddividere in tre colonne, ma è stata definita solo una colonna in df1_newlist[["column1"]].
Per risolvere il problema, eseguire il codice seguente:
df1_newlist[["column1","column2","column3"]] = df1_newlist["column1"].str.split(" ", expand=True) #Splitting based on the space between the values.
print(df1_newlist)
Il risultato è il seguente: il problema è stato risolto!