J'ai un cadre de données Python Pandas df :
d=[['hello',1,'GOOD','long.kw'],
[1.2,'chipotle',np.nan,'bingo'],
['various',np.nan,3000,123.456]]
t=pd.DataFrame(data=d, columns=['A','B','C','D'])
qui ressemble à ceci :
print(t)
A B C D
0 hello 1 GOOD long.kw
1 1.2 chipotle NaN bingo
2 various NaN 3000 123.456
J'essaye de créer une nouvelle colonne qui est une list
des valeurs dans A
, B
, C
y D
. Cela ressemblerait donc à ceci :
t['combined']
Out[125]:
0 [hello, 1, GOOD, long.kw]
1 [1.2, chipotle, nan, bingo]
2 [various, nan, 3000, 123.456]
Name: combined, dtype: object
J'essaie ce code :
t['combined'] = t.apply(lambda x: list([x['A'],
x['B'],
x['C'],
x['D']]),axis=1)
Ce qui renvoie cette erreur :
ValueError: Wrong number of items passed 4, placement implies 1
Ce qui m'intrigue, c'est que si je supprime l'une des colonnes que je veux mettre dans la liste (ou si j'ajoute une autre colonne au cadre de données que je n'ajoute PAS à la liste), mon code fonctionne.
Par exemple, exécutez ce code :
t['combined'] = t.apply(lambda x: list([x['A'],
x['B'],
x['D']]),axis=1)
Renvoie ceci, ce qui est parfait si je ne voulais que les 3 colonnes :
print(t)
A B C D combined
0 hello 1 GOOD long.kw [hello, 1, long.kw]
1 1.2 chipotle NaN bingo [1.2, chipotle, bingo]
2 various NaN 3000 123.456 [various, nan, 123.456]
Je ne comprends pas pourquoi le fait de demander que la liste "combinée" soit constituée de toutes les colonnes du cadre de données crée une erreur, alors qu'en sélectionnant toutes les colonnes sauf une pour créer la liste "combinée", la liste est créée comme prévu.