web-dev-qa-db-fra.com

Erreur de conversion des données lors de l'application d'une fonction à chaque ligne dans pandas Python

J'ai une trame de données dans pandas in python qui ressemble à quelque chose comme ça -

    contest_login_count  contest_participation_count  ipn_ratio
0                    1                            1   0.000000
1                    3                            3   0.083333
2                    3                            3   0.000000
3                    3                            3   0.066667
4                    5                           13   0.102804
5                    2                            3   0.407407
6                    1                            3   0.000000
7                    1                            2   0.000000
8                   53                           91   0.264151
9                    1                            2   0.000000

Maintenant, je veux appliquer une fonction à chaque ligne de cette trame de données La fonction est écrite comme ceci -

def findCluster(clusterModel,data):
    return clusterModel.predict(data)

J'applique cette fonction à chaque ligne de cette manière -

df_fil.apply(lambda x : findCluster(cluster_all,x.reshape(1,-1)),axis=1)

Lorsque j'exécute ce code, je reçois un avertissement disant -

DataConversionWarning: les données avec l'objet dtype d'entrée ont été converties en float64.

warnings.warn (msg, DataConversionWarning)

Cet avertissement est imprimé une fois pour chaque ligne. Depuis, j'ai environ 450K lignes dans mon bloc de données, mon ordinateur se bloque lors de l'impression de tous ces messages d'avertissement sur le bloc-notes ipython.

Mais pour tester ma fonction, j'ai créé une trame de données factice et j'ai essayé d'appliquer la même fonction là-dessus et cela fonctionne bien. Voici le code pour cela -

t = pd.DataFrame([[10.35,100.93,0.15],[10.35,100.93,0.15]])
t.apply(lambda x:findCluster(cluster_all,x.reshape(1,-1)),axis=1)

La sortie de ceci est -

   0  1  2
0  4  4  4
1  4  4  4

Quelqu'un peut-il suggérer ce que je fais de mal ou que puis-je changer pour faire disparaître cette erreur?

9
dragster

Je pense qu'il y a un problème dtype d'une colonne n'est pas float.

Vous devez le lancer par astype :

df['colname'] = df['colname'].astype(float)
11
jezrael