【问题标题】:multilabel binarizer: float object not iterable多标签二值化器:浮动对象不可迭代
【发布时间】:2019-03-01 02:31:12
【问题描述】:

我有以下数据框

df[['row_num','set_id']].head()

row_num     path_id_set
988681      [31672, 0]
988680      [31965, 0]
988679      [0, 78464]

我正在尝试使用多标签二值化器,但由于错误代码浮动对象不可迭代而失败

from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
mlb.fit_transform(df['set_id'].str.split(','))

TypeError: 'float' object is not iterable

【问题讨论】:

    标签: python pandas machine-learning scikit-learn


    【解决方案1】:

    我认为问题是缺少值,您可以使用:

    print (df)
       row_num     set_id
    0   988681        NaN
    1   988680  [31965,0]
    2   988679  [0,78464]
    
    from sklearn.preprocessing import MultiLabelBinarizer
    mlb = MultiLabelBinarizer()
    
    #create boolean mask matched non NaNs values
    mask = df['set_id'].notnull()
    
    #filter by boolean indexing
    arr = mlb.fit_transform(df.loc[mask, 'set_id'].dropna().str.strip('[]').str.split(','))
    
    #create DataFrame and add missing (NaN)s index values
    df = (pd.DataFrame(arr, index=df.index[mask], columns=mlb.classes_)
                   .reindex(df.index, fill_value=0))
    
    print (df)
       0  31965  78464
    0  0      0      0
    1  1      1      0
    2  1      0      1
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2014-03-16
      • 1970-01-01
      • 2011-12-28
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2021-05-16
      相关资源
      最近更新 更多