如何对 pandas DataFrame 中的值进行二值化?
Posted
技术标签:
【中文标题】如何对 pandas DataFrame 中的值进行二值化?【英文标题】:How to binarize the values in a 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 包中是否有内置功能?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何对 pandas DataFrame 中的值进行二值化?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过对第 3 列中的值求和,将前 2 列中具有相同值的 Pandas Dataframe 行组合在一起?
pandas使用replace函数替换dataframe中的值:replace函数对dataframe中指定数据列的值进行替换替换具体数据列的相关值