我无法让 scilearn 与日期时间系列一起工作。
找到这篇文章但没有帮助我 = Pandas : TypeError: float() argument must be a string or a number
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 聚类模型。 打印数据类型时,结果如下:
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 聚类模型在我转换数值时可以处理数值,但事实并非如此。
我做错了什么?
最佳答案
我建议更改您的解决方案 - 但也要简化:
- 添加参数
parse_dates
将列转换为日期时间,然后再转换为数字 unix datetimes - 为了转换移除
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
关于python - float() 参数必须是字符串或数字,而不是 'Timestamp',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53896757/