将函数应用于pandas Python中的每一行时出现数据转换错误

时间:2016-08-29 19:55:51

标签: python function pandas dataframe apply

我在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:输入dtype对象的数据已转换为float64。

     

warnings.warn(msg,DataConversionWarning)

每行打印一次此警告。因为,我的数据框中有大约450K行,我的计算机挂起,同时在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

任何人都可以建议我做错了什么或者我可以改变什么才能使这个错误消失?

1 个答案:

答案 0 :(得分:9)

我认为某些列的问题dtype不是float

您需要按astype

进行投射
df['colname'] = df['colname'].astype(float)