本文介绍了 pandas :将多个类别转换为假人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一张表格,其中每一行都可以属于多个类别,例如
I have a table where each row can belong to multiple categories such as,
test = pd.DataFrame({
'name': ['a', 'b'],
'category': [['cat1', 'cat2'],['cat1', 'cat3']]
})
如何将每个类别转换为虚拟变量,使上表变成
How can I convert each category to a dummy variable in such a way that the above table becomes,
test_res = pd.DataFrame({
'name': ['a', 'b'],
'cat1': [1, 1],
'cat2': [1, 0],
'cat3': [0, 1]
})
我尝试了pd.get_dummies(test['category'])
,但收到以下错误消息,
I tried pd.get_dummies(test['category'])
but get the following error,
TypeError: unhashable type: 'list'
推荐答案
您可以使用 pandas.get_dummies
,但首先将list
列转换为新的DataFrame
:
You can use pandas.get_dummies
, but first convert list
column to new DataFrame
:
print (pd.DataFrame(test.category.values.tolist()))
0 1
0 cat1 cat2
1 cat1 cat3
print (pd.get_dummies(pd.DataFrame(test.category.values.tolist()), prefix_sep='', prefix=''))
cat1 cat2 cat3
0 1 1 0
1 1 0 1
最后添加列name
由 concat
:
print (pd.concat([pd.get_dummies(pd.DataFrame(test.category.values.tolist()),
prefix_sep='', prefix='' ),
test[['name']]], axis=1))
cat1 cat2 cat3 name
0 1 1 0 a
1 1 0 1 b
Another solution with Series.str.get_dummies
:
print (test.category.astype(str).str.strip('[]'))
0 'cat1', 'cat2'
1 'cat1', 'cat3'
Name: category, dtype: object
df = test.category.astype(str).str.strip('[]').str.get_dummies(', ')
df.columns = df.columns.str.strip("'")
print (df)
cat1 cat2 cat3
0 1 1 0
1 1 0 1
print (pd.concat([df, test[['name']]], axis=1))
cat1 cat2 cat3 name
0 1 1 0 a
1 1 0 1 b
这篇关于 pandas :将多个类别转换为假人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!