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

Nig*_*all 5 python pandas scikit-learn

我无法使scilearn与datetime系列配合使用。

找到了这篇文章,但是对我没有帮助= Pandas:TypeError:float()参数必须是字符串或数字

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

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

还尝试了pandas.to_datetime()倒霉。

我在scilearn中使用的模型是KMeans聚类模型。在打印dtypes时,结果如下:

ip                      int64
date           datetime64[ns]
succesFlag              int64
app                     int64
enddate        datetime64[ns]
user_userid             int64
dtype: object
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

期望KMeans聚类模型可以将数值转换为数值,但事实并非如此。

我怎么了?

jez*_*ael 5

我建议更改您的解决方案-一个,但也可以简化:

  • 添加参数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
Run Code Online (Sandbox Code Playgroud)