浮点数()参数必须是字符串或数字,而不是“时间戳”。

5
我无法让scilearn与日期时间序列一起工作。
我找到了这篇帖子,但没有帮助我 = Pandas:TypeError:float()参数必须是字符串或数字 CSV文件有2个日期列,格式如下: 2017-07-21 06:19:53(字符串)
我将字符串转换为datetime64 [ns],因此日期变成了长值,我可以对其进行计算。 scilearn拒绝此类型,并给出错误float() argument must be a string or a number, not 'Timestamp'。
也尝试使用pandas.to_datetime(),但没有成功。
我在scilearn中使用的模型是KMeans聚类模型。 打印dtypes时得到以下结果:
ip                      int64
date           datetime64[ns]
succesFlag              int64
app                     int64
enddate        datetime64[ns]
user_userid             int64
dtype: object

这是我的代码:

def getDataframe():
    df = pd.read_csv(filename)
    df['date']=df['date'].astype('datetime64[ns]',inplace=True)
    df['enddate']=df['enddate'].astype('datetime64[ns]',inplace=True)
    df['app']=df['app'].replace({
            "Azure": 0 ,
            "Peoplesoft":1,
            "Office":2 ,
            "DevOps":3 ,
            "Optima":4 ,
            "Ada-Tech": 5 
         },inplace=True)    
    df['ip']=df['ip'].apply(lambda x: int(ip4.ip_address(x))).to_frame('ip')
    print(df.dtypes)
    return df

预期KMeans聚类模型将使用我转换后的数值,但实际上它并没有起作用。

我做错了什么?

1个回答

6
我建议您改变您的解决方案 - 但也要简化一些:
  • 添加参数 parse_dates,将列转换为日期时间格式,然后再转换为数字 Unix日期时间戳
  • 为了进行转换,请删除 inplace=True 或使用更快的 map - 它也会为不匹配的值创建 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

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