文章目录
序言
本例讲了如何将value_counts结果转为dataFrame,value_counts的结果是Series,所以本质是将Series转为DataFrame,学会后触类旁通。
学到的知识包括:
- Series
- index简介
- rename_axis
- reset_index
- set_index
代码示例
value_counts
的结果是一个series
,其index
为原来列的值,value
为值的个数。要将其转为DataFrame
需要两个函数rename_axis
和reset_index
.
代码如下:
>>>> df = pd.DataFrame([[i,i*10] for i in range(10)], columns=['a', 'b'])
>>> df
a b
0 0 0
1 1 10
2 2 20
3 3 30
4 4 40
5 5 50
6 6 60
7 7 70
8 8 80
9 9 90
>>> df.b.value_counts().rename_axis("b").reset_index(name="counts")
b counts
0 0 1
1 10 1
2 20 1
3 30 1
4 40 1
5 50 1
6 60 1
7 70 1
8 80 1
9 90 1
原理讲解
将series转为DataFrame
,要想为需要介绍下index类别和两个函数。
带名index 和 默认index
rename_axis
value_counts的结果是无名index
,要给他一个名字,使用rename_axis即可。对于Series,rename_axis可以给index改名字,但不支持给value列改名字。对于DataFram,这个函数额外支持对列改名字。如下:
rename_axis只有一个axis轴,所以参数axis
值为0。在series下,rename_axis只有给index改名字的功能。
reset_index
reset_index
对于series
对象来说,将series
转为dataframe,同时做三件事:
- index转为普通列
- 给新的dataFrame设置一个默认RangeIndex
- 给value列一个名字,这个名字用name参数传递。如下:
>>> s = pd.Series(["dog", "cat", "monkey"])
>>> s.rename_axis("key").reset_index('key', name="animal")
key animal
0 0 dog
1 1 cat
2 2 monkey
rename_axis,set_index,reset_index对于DataFrame下的应用
set_index
是给DataFrame指定某一列作为index,并抛弃掉原来的index。
如下:
reset_index
是将DataFrame的index重置为普通列,并设置一个默认index。如下:
总结
将value_counts的结果改成DataFrame实质上发生了这些事情:
1. 给Series的无名index重命名。-----用到rename_axis
2. 将series的index改成列,并给一个新无名index,同时给value列重命名。----用到reset_index
其他应用
quantile结果转为DataFrame
>>> df = pd.DataFrame([[i,i*10] for i in range(10)], columns=['a', 'b'])
>>> df.a.quantile([i/4 for i in range(5)]).rename_axis("a_decile").reset_index(name='value_pointer')
a_decile value_pointer
0 0.00 0.00
1 0.25 2.25
2 0.50 4.50
3 0.75 6.75
4 1.00 9.00