|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1.现有一组记录客户id,年龄及是否正常还款的数据,想要以年龄进行分箱,之后分析不同年龄段的还款能力差异,代码如下:df_3=pd.read_excel('D:\数据统计分析\客户还款能力分析.xlsx')
bins=[19,30,40,50,60,70]
sections=pd.cut(df_3['age'],bins)
得到的结果是这样的:
0 (19, 30]
1 (19, 30]
2 (19, 30]
3 (19, 30]
4 (19, 30]
...
495 (60, 70]
496 (60, 70]
497 (60, 70]
498 (60, 70]
499 (60, 70]
Name: age, Length: 500, dtype: category
Categories (5, interval[int64]): [(19, 30] < (30, 40] < (40, 50] < (50, 60] < (60, 70]]
看上去返回的是一个category对象,但是我使用type(sexction)时返回的结果是pandas.core.series.Series
然后按照书上的说法,这个sections对象有两个属性codes和categories,在我访问这两个属性的时候给出的报错是:
AttributeError: 'Series' object has no attribute 'codes;
AttributeError: 'Series' object has no attribute 'categories'
该如何解决?
2.pd.cut方法有一个precision参数说是可以改变分箱边界的数字精度,这个是在什么场景下起作用?能帮忙举个例子嘛?
3.pd.cut方法有一个duplicates参数看上去是删除重复值的意思,这个是在什么场景下起作用?能帮忙举个例子嘛?
本帖最后由 阿奇_o 于 2022-4-6 17:54 编辑
那是旧版本的pandas吧,要看你现在用的是哪个版本。
我这是1.1.4版本,也没有了那两个属性,然后我查了下,是要 转为pandas.Categorical()实例对象,才有 , 如 >>> import pandas as pd
>>> pd.__version__
'1.1.4'
>>> df = pd.DataFrame({'name':list('ABCD'), 'age':[19, 30, 50, 65]})
>>> df['ct'] = pd.cut(df.age, bins=[18,30,50,99], labels=['青年', '中年', '老年'])
>>> df
name age ct
0 A 19 青年
1 B 30 青年
2 C 50 中年
3 D 65 老年
>>> pd.Categorical(df.ct)
['青年', '青年', '中年', '老年']
Categories (3, object): ['青年' < '中年' < '老年']
>>> pd.Categorical(df.ct).codes
array([0, 0, 1, 2], dtype=int8)
>>> pd.Categorical(df.ct).categories
Index(['青年', '中年', '老年'], dtype='object')
# 补充:或者用 .cat "类别读取器"
>>> df.ct.cat
<pandas.core.arrays.categorical.CategoricalAccessor object at 0x00000241AE7503C8>
>>> df.ct.cat.codes
0 0
1 0
2 1
3 2
dtype: int8
>>> df.ct.cat.categories
Index(['青年', '中年', '老年'], dtype='object')
>>>
其他的问题,自己查查官方文档和用户手册。
|
|