zzong2019 发表于 2022-4-5 20:44:11

关于pandas使用cut函数进行分箱的几个问题

1.现有一组记录客户id,年龄及是否正常还款的数据,想要以年龄进行分箱,之后分析不同年龄段的还款能力差异,代码如下:
df_3=pd.read_excel('D:\数据统计分析\客户还款能力分析.xlsx')
bins=
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): [(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:49:18

本帖最后由 阿奇_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':})
>>> df['ct'] = pd.cut(df.age, bins=, labels=['青年', '中年', '老年'])
>>> df
nameagect
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(, 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')
>>>


其他的问题,自己查查官方文档和用户手册。

zzong2019 发表于 2022-4-6 21:23:27

阿奇_o 发表于 2022-4-6 17:49
那是旧版本的pandas吧,要看你现在用的是哪个版本。
我这是1.1.4版本,也没有了那两个属性,然后我查了 ...

好的,谢谢你这么认真的解答~
页: [1]
查看完整版本: 关于pandas使用cut函数进行分箱的几个问题