Tempo estimado de leitura: 3 atas
Está à procura de aprender píton, e no processo a deparar-se com este erro e a tentar compreender porque é que ele ocorre?
Em essência, isto ocorre normalmente quando se tem mais do que um quadro de dados e no processo de escrita do programa se tenta utilizar os quadros de dados e os seus dados, mas há uma descoordenação no número de itens em cada um que o programa não pode processar até que seja corrigido.
Um cenário comum em que isto pode acontecer é quando se está a juntar quadros de dados ou a dividir os dados, estes serão demonstrados abaixo.
Cenário 1 - Junção de quadros de dados
Onde temos df1[['a']] = df2 estamos a atribuir os valores do lado esquerdo do sinal de igual ao que está do lado direito.
Quando olhamos para o lado direito, tem três colunas, o lado esquerdo tem uma.
Como resultado, o erro "ValueError": As colunas devem ter o mesmo comprimento que a chave" aparecerá, de acordo com o abaixo indicado.
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
O código acima atira o erro abaixo:
O objectivo aqui é ter todas as colunas do lado direito, ao lado das colunas do lado esquerdo, como se segue:
O que fizemos foi tornar ambos os lados iguais no que diz respeito ao número de colunas a mostrar a partir de df2
Essencialmente estamos a pegar na coluna da DF1, e depois a trazer as três colunas da DF2.
A columna, columnb, columnc abaixo correspondem às três colunas da DF2, e armazenará os dados das mesmas.
A correcção para esta edição é: df1[[['columna','columnb','columnc']] = df2
imprimir (df1)
Cenário 2 - Separação de dados
Pode haver uma ocasião em que se tenha uma lista de pitões, e é necessário dividir os valores dessa lista em colunas separadas.
new_list1 = ['1 2 3']
df1_newlist = pd.DataFrame(new_list1,columns=['column1'])
No acima exposto, criámos uma lista, com três valores que fazem parte de uma cadeia. Aqui o que procuramos fazer é criar uma nova coluna com o código abaixo:
df1_newlist[["column1"]] = df1_newlist["column1"].str.split(" ", expand=True) #Splitting based on the space between the values.
print(df1_newlist)
Quando executamos o acima referido, lança o seguinte erro de valor:
A razão pela qual se atira o erro é que a lógica tem três valores a serem divididos em três colunas, mas só definimos uma coluna em df1_newlist[["coluna1"]].
Para corrigir isto, executamos o código abaixo:
df1_newlist[["column1","column2","column3"]] = df1_newlist["column1"].str.split(" ", expand=True) #Splitting based on the space between the values.
print(df1_newlist)
Isto devolve o seguinte resultado, com o problema resolvido!