float()参数必须是字符串或数字,而不是“Timestamp”

2024-05-07 22:17:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我不能让scilearn处理日期时间序列。在

找到了这个帖子但没有帮到我= Pandas : TypeError: float() argument must be a string or a number

csv文件有2个带有日期的日期列,日期格式如下: 2017-07-21 06:19:53(字符串)

我将字符串转换为datetime64[ns],这样日期就变成了一个长值,我可以对它进行计算。scilearn拒绝此类型并给出错误float()参数必须是字符串或数字,而不是“Timestamp”

也尝试过熊猫。到目前为止()运气不好。在

我在scilearn中使用的模型是KMeans集群模型。 打印数据类型时,结果如下:

ip                      int64
date           datetime64[ns]
succesFlag              int64
app                     int64
enddate        datetime64[ns]
user_userid             int64
dtype: object

这是我的代码:

^{pr2}$

我们的期望是KMeans聚类模型可以在我转换数值时使用它们,但是它没有。在

我做错什么了?在


Tags: 字符串模型pandas时间序列floatargument帖子
1条回答
网友
1楼 · 发布于 2024-05-07 22:17:43

我建议改变你的解决方案a,但也要简化:

  • 添加参数parse_dates,用于将列转换为日期时间,然后转换为数值unix datetimes
  • 对于转换removeinplace=True或使用更快的^{}-它还为不匹配的值创建nan,因此输出也是数字的

def getDataframe():
    df = pd.read_csv(filename, parse_dates=['date','enddate'])
    df[['date','enddate']] = df[['date','enddate']].astype(np.int64) // 10**9

    df['app']=df['app'].map({
            "Azure": 0 ,
            "Peoplesoft":1,
            "Office":2 ,
            "DevOps":3 ,
            "Optima":4 ,
            "Ada-Tech": 5 
         })    
    df['ip']=df['ip'].apply(lambda x: int(ip4.ip_address(x))).to_frame('ip')
    print(df.dtypes)
    return df

相关问题 更多 >