在pandas Python中为每一行应用一个函数时出现数据转换错误。

11

我在Python的Pandas中有一个数据框,类似于以下内容 -

    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: Data with input dtype object was converted to float64. warnings.warn(msg, DataConversionWarning)
对于每一行数据,都会打印出一次这个警告。由于我的数据框中有大约450K行数据,当ipython notebook打印所有这些警告消息时,我的电脑就会卡住。
但是为了测试我的函数,我创建了一个虚拟数据框,并尝试在上面应用相同的函数,结果运行良好。以下是该代码 -
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

有人能否建议我做错了什么或者我可以改变什么来消除这个错误?

3
df_fil.info()是什么?也许有一些列不是float类型。 - jezrael
@jezrael,您能将其添加为答案吗?这个方法可行! :) - dragster
当然,我会将其添加到答案中。 - jezrael
1个回答

15

我认为某些列的 dtype 不是 float,存在问题。

你需要使用 astype 进行转换:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接