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

标签 python pandas scikit-learn

我无法让 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/

相关文章:

python - 搜索 SQLite 数据库数千次的最快方法?

python - 适用于 Python 的 Amazon Lex 模拟

python - 将(设置)应用于 Pandas 数据框中的两列

python - 像这样向 pandas 数据框添加一行有什么问题吗?

python - 为什么 scikit learn 的平均精度分数返回 nan?

python - 如果我将 FeatureUnion 的 Transformer_weights 设置为 0 会发生什么?

python - 在同一测试中模拟对同一功能的两个单独响应

python - PySide 如何在拖放时保持 QLabel 可见?

python - 根据分组依据中的值数量来透视数据,而不是完整的透视

python - 我想绘制梯度Boost的误差和树大小