【问题标题】:Use the DBSCAN algorithm on data对数据使用 DBSCAN 算法
【发布时间】:2019-04-18 12:02:42
【问题描述】:

我正在尝试将DBSCAN 算法应用于一个小型数据帧,以便在之后进行异常值预测。所有列都有数值,但即使我没有空值,我也会不断收到相同的错误。

这是我调用算法的代码:

    db = DBSCAN(eps=0.09, min_samples=10).fit(dfc)
    m = loop.LocalOutlierProbability(dfc).fit()
    scores_noclust = m.local_outlier_probabilities
    m_clust = loop.LocalOutlierProbability(dfc, 
    cluster_labels=list(db.labels_)).fit()
    scores_clust = m_clust.local_outlier_probabilities
    print(list(scores_clust))

我得到这个错误:

输入类型不支持 ufunc 'isnan',输入可以 不会根据强制转换安全地强制转换为任何支持的类型 规则“安全”

我不明白为什么,因为我没有空值。

【问题讨论】:

  • nan,而不是null。您显然没有将数字传递到某个地方。
  • 是的,我有一列仍然是一个对象,但不知何故,当我制作 pd.to_numeric(dfc['Idade']).astype(int) 什么也没发生,它没有给出错误但是该列保持为对象
  • 你保存结果了吗? dfc['Idade'] = pd.to_numeric(dfc['Idade']).astype(int) ?
  • dfc['Idade'].astype(int) dfc.dtypes
  • 这还不够。 astype 只返回一个新系列,它不会修改当前系列。

标签: python outliers dbscan


【解决方案1】:

根据您的 cmets,您似乎有一列包含需要转换为整数的对象。

dfc['Idade'] = pd.to_numeric(dfc['Idade']).astype(int)

仅仅做演员是不够的,它只是返回一个新的系列,但它不会修改旧的,你必须明确地这样做。

【讨论】:

    猜你喜欢
    • 2021-04-19
    • 2011-08-06
    • 2020-02-14
    • 1970-01-01
    • 2021-08-30
    • 2017-09-15
    • 2017-03-05
    • 2014-07-24
    • 2017-05-17
    相关资源
    最近更新 更多