python - pandas.DataFrame 和 pandas.Series 对象对 pandas.get_dummies() 的作用不同
问题描述
我有一dataframe
列名为“质量”的火车。
>>>train['quality'].unique()
array([5, 6, 7, 4, 8, 3], dtype=int64)
现在get_dummies
有了train[['quality']]
_
>>>pd.get_dummies(train[['quality']]).head()
quality
0 5
1 5
2 5
3 6
4 5
但与train['quality']
>>>pd.get_dummies(train['quality']).head()
3 4 5 6 7 8
0 0 0 1 0 0 0
1 0 0 1 0 0 0
2 0 0 1 0 0 0
3 0 0 0 1 0 0
4 0 0 1 0 0 0
train[['quality']]
和的数据类型train['quality']
是:-
>>>print(type(train['quality']))
<class 'pandas.core.series.Series'>
>>>print(type(train[['quality']]))
<class 'pandas.core.frame.DataFrame'>
该get_dummies()
文档指出:data : array-like, Series, or DataFrame
因此,如果我可以同时提供一个系列, DataFrame
那么为什么输出会有所不同?
解决方案
pd.get_dummies
文档清楚地说明了这一点:
columns
None
:要编码的 DataFrame 中的类似列表的默认列名。如果 columns 是 None 那么所有具有 object 或 category dtype 的列都将被转换。
因此,解决方案是指定一个columns
参数,从而覆盖列以分类/对象类型开头的要求,
pd.get_dummies(df, columns=['quality'])
quality_5 quality_6
0 1 0
1 1 0
2 1 0
3 0 1
4 1 0
或者,将列转换为分类。
pd.get_dummies(df[['quality']].astype('category'))
quality_5 quality_6
0 1 0
1 1 0
2 1 0
3 0 1
4 1 0
推荐阅读
- javascript - 单击时更改按钮上的文本
- mysql - MySQL 显示不同的版本
- mysql - 如何在 MySQL 自然全外连接中使用别名?
- dns - 正常挖掘的 DNS SERVFAIL 错误,但 +trace 没有错误
- java - 即使在明显的非零初始化之后,如何修复充满零的数组?
- php - Wordpress WPBakery 禁用 prettyPhoto 并使用响应式灯箱和图库
- dart - 将 http 响应转换为 Flutter 列表
- elasticsearch - 使用 elasticsearch 搜索准确的词条位置
- android - 错误无法在 Proguard Enabled 版本中实例化服务 com.google.firebase.iid.FirebaseInstanceIdService: java.lang.ClassNotFoundException-
- ios - MPCPlayerRequestErrorDomain Code=1000 "发送命令 0 失败"