【发布时间】:2019-01-17 03:40:16
【问题描述】:
我遇到了这种令人惊讶的无法访问我期望的 CSV 中的一列数据的 codes 属性的问题@。
如果我运行以下代码
import pandas
csv_str = """c1,c2
a,1
b,2
a,3
c,4
a,5"""
df = pandas.read_csv( pandas.compat.StringIO( csv_str ) , dtype={'c1':'category'} )
print( "DataFrame\n{}".format( df ))
print( "\nDataTypes\n{}".format( df.dtypes ))
print( "\nDataCodes\n{}".format( pandas.Categorical( df['c1'] ).codes ))
# EXCEPTION
print( df['c1'].codes )
我得到以下控制台输出
DataFrame
c1 c2
0 a 1
1 b 2
2 a 3
3 c 4
4 a 5
DataTypes
c1 category
c2 int64
dtype: object
DataCodes
[0 1 0 2 0]
Traceback (most recent call last):
File "/Users/$USER/test.py", line 17, in <module>
print( df['c1'].codes )
File "/Users/$USER/Applications_User/anaconda2/lib/python2.7/site-packages/pandas/core/generic.py", line 4376, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'Series' object has no attribute 'codes'
这里到底发生了什么,为什么我不能将属于类别类型的 c1 列视为 Categorical?我想我在这里遗漏了一些微妙的观点。 pandas category 值 Series 与 pandas Categorical 数据类型有什么区别。
是否有直接访问类别值系列代码的替代途径?
【问题讨论】: