web-dev-qa-db-ja.com

pandas Python

pandas in pythonこれは次のようなものです。

    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

次に、このデータフレームの各行に関数を適用します。関数は次のように記述されます-

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

この方法でこの関数を各行に適用します-

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

このコードを実行すると、次の警告が表示されます-

DataConversionWarning:入力dtypeオブジェクトを持つデータは、float64に変換されました。

warnings.warn(msg、DataConversionWarning)

この警告は、行ごとに1回出力されます。データフレームに約45万行あるため、これらの警告メッセージをすべてipythonノートブックに出力しているときにコンピューターがハングします。

しかし、関数をテストするために、ダミーのデータフレームを作成し、それに同じ関数を適用してみましたが、うまく機能しました。これがそのコードです-

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)

これへの出力は-

   0  1  2
0  4  4  4
1  4  4  4

誰かが私が間違っていることを提案したり、このエラーを解消するために何を変更したりできますか?

9
dragster

一部の列のdtypefloatではない問題があると思います。

astype でキャストする必要があります:

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