首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MergeError:不兼容的合并dtype,dtype('O')和dtype('O'),双方都必须有数字dtype。

MergeError:不兼容的合并dtype,dtype('O')和dtype('O'),双方都必须有数字dtype。
EN

Stack Overflow用户
提问于 2022-02-27 11:09:38
回答 1查看 2.2K关注 0票数 0

我需要输出一个列,该列将指示每个用户(user_id)的第二个事件的时间。该列应该与列‘second_event’相同。我创建了一个新的DataFrame,其中添加了每个用户的所有第二个事件。然后,我向同一个DataFrame添加了一个列,其中添加了每个用户的第二个事件的时间。然后,我根据'time‘列对它们进行排序,并使用merge_asof方法组合它们。我得到一个错误: MergeError:不兼容的合并dtype,dtype('O')和dtype('O'),双方都必须有数字dtype。你能告诉我如何在我的情况下纠正错误吗?

这是我的密码

代码语言:javascript
复制
import pandas as pd
data = pd.read_csv('file_path')
sessions_start_user = data[data['events_ordinal_number'] == 2]
sessions_start_user['second_time'] = sessions_start_user['time']
data = data.sort_values('time')
sessions_start_user = sessions_start_user.sort_values('time')
data = pd.merge_asof(data,sessions_start_user[['time','user_id','second_time']],on='time',by='user_id')

这是我原始数据框架(数据)的一部分。

代码语言:javascript
复制
    Unnamed: 0  time                user_id type        amount  target  feature1    feature2    events_ordinal_number   second_event_time   loan_ordinal_number events_time_diff    previous_loans_max_amount
0      0        2001-01-01 00:00:00 114     loanRequest 14651   NaN        1            1       1                       2001-01-25 05:00:00     1                   NaN              NaN
1      1        2001-01-01 01:00:00 199     loanRequest 13398   NaN        0            0       1                       2001-01-08 01:00:00     1                   NaN              NaN
2      2        2001-01-01 02:00:00 717     loanRequest 14525   NaN        0            0       1                       2001-01-09 16:00:00     1      .            NaN              NaN
3      3        2001-01-01 03:00:00 66      loan        14437   1.0        1            1       1                       2001-03-27 17:00:00     1                   NaN              NaN
4      4        2001-01-01 04:00:00 584     loanRequest 15861   NaN        1            0       1                       2001-01-05 10:00:00     1                   NaN              NaN

这是其中一个用户的数据显示的一部分,在"events_ordinal_number“列中指示每个用户的所有事件的序列号。

代码语言:javascript
复制
    Unnamed: 0  time                user_id type       amount   target  feature1    feature2    events_ordinal_number   second_event_time   loan_ordinal_number events_time_diff    previous_loans_max_amount
0   0           2001-01-01 00:00:00 114     loanRequest 14651   NaN        1            1           1                   2001-01-25 05:00:00    1                NaN                         NaN
581 581         2001-01-25 05:00:00 114     loanRequest 13611   NaN        1            0           2                   2001-01-25 05:00:00    1                24 days 05:00:00            NaN
624 624         2001-01-27 00:00:00 114     loanRequest 14515   NaN        1            0           3                   2001-01-25 05:00:00    1                1 days 19:00:00             NaN

我也这样做,索引被调整到正确的顺序,但是错误仍然存在:

代码语言:javascript
复制
sessions_start_user=pd.concat([sessions_start_user, sessions_start_user.reset_index(drop=True, inplace=True)], axis=1)

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-02-28 08:08:19

您应该首先将time列转换为日期时间-- pd.merge_asof不适用于字符串列。来自文档

on:要加入的字段名。必须在两个DataFrames中找到。必须对数据进行排序。此外,这必须是一个数值列,如datetimelike、整型或浮点数。

添加

代码语言:javascript
复制
data["time"] = pd.to_datetime(data["time"])

到了你的脚本开始的时候就应该做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71284238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档