【问题标题】:How to binarize the values in a pandas DataFrame?如何对 pandas DataFrame 中的值进行二值化?
【发布时间】:2016-12-06 20:53:07
【问题描述】:

我有以下数据框:

df = pd.DataFrame(['Male','Female', 'Female', 'Unknown', 'Male'], columns = ['Gender'])

我想将其转换为具有“男性”、“女性”和“未知”列的 DataFrame,值 0 和 1 表示性别。

Gender  Male  Female
Male     1      0
Female   0      1
       .
       .
       .
       .

为此,我编写了一个函数并使用 map 调用该函数。

def isValue(x , value):
if(x == value):
    return 1
else: 
    return 0


for value in df['Gender'].unique():
    df[str(value)] = df['Gender'].map( lambda x: isValue(str(x) , str(value)))

效果很好。但是有没有更好的方法来做到这一点?我可以使用的任何 sklearn 包中是否有内置功能?

【问题讨论】:

    标签: python pandas dataframe scikit-learn


    【解决方案1】:

    是的,有更好的方法来做到这一点。它叫pd.get_dummies

    pd.get_dummies(df)
    

    复制你所拥有的:

    order = ['Gender', 'Male', 'Female', 'Unknown']
    pd.concat([df, pd.get_dummies(df, '', '').astype(int)], axis=1)[order]
    

    【讨论】:

      【解决方案2】:

      我的偏好是pd.get_dummies()。是的,有 sklearn 方法。

      来自文档:

      >>> from sklearn.preprocessing import OneHotEncoder
      >>> enc = OneHotEncoder()
      >>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])  
      OneHotEncoder(categorical_features='all', dtype=<... 'float'>,
             handle_unknown='error', n_values='auto', sparse=True)
      >>> enc.n_values_
      array([2, 3, 4])
      >>> enc.feature_indices_
      array([0, 2, 5, 9])
      >>> enc.transform([[0, 1, 1]]).toarray()
      array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.]])
      

      http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

      【讨论】:

        猜你喜欢
        • 2016-09-14
        • 2012-06-03
        • 1970-01-01
        • 2018-08-22
        • 1970-01-01
        • 2019-02-27
        • 2020-12-06
        • 2021-03-21
        • 2017-02-10
        相关资源
        最近更新 更多