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

Posted

技术标签:

【中文标题】将函数应用于pandas Python中的每一行时出现数据转换错误【英文标题】:Data Conversion Error while applying a function to each row in pandas Python 【发布时间】:2017-01-05 22:50:44 【问题描述】:

我在 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

现在我想对这个dataframe的每一行应用一个函数函数写成这样——

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

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

【问题讨论】:

df_fil.info() 是什么?也许某些列不是float @jezrael 你能把它添加为答案吗?这行得通! :) 当然,我添加它来回答。 【参考方案1】:

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

你需要astype:

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

【讨论】:

以上是关于将函数应用于pandas Python中的每一行时出现数据转换错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将函数应用于 MATLAB 中矩阵的每一行/列?

将函数应用于 data.frame 中的每一行并将结果附加到 R 中的 data.frame

将邮政编码 API 调用应用于数据框中的每一行

对 Pandas 数据框中的每一行只运行一次函数

将组平均值分配给 python/pandas 中的每一行

python 将函数应用于pandas数据帧中的两列