pandas 之index 扫盲

转载https://blog.csdn.net/claroja/article/details/72930594

pandas 之index 扫盲

pandas的基本概念 index 索引

数据清理和整理时常要用到

pandas的对索引(正常从0开始)主要是7、8个函数

  1. DataFrame.rename
  2. DataFrame.rename_axis
  3. DataFrame.reindex
  4. DataFrame.reindex_axis
  5. DataFrame.reset_index、DataFrame.set_index
  6. pandas.Index.reindex
  7. pandas.Index.set_names

其中,1、2是对索引/列的更改,索引/列的值按指定的字典(或其他)一一对应变化
3、4是增加、减少、筛选过滤索引(或列),如果搜索或列还存在,就按照原来的值,如果不存在,就按指定的填充方式填充数据或填空值np.NaN
5,reset_index是重新赋值索引,从0开始,set_index是指定某列(某些列)为索引,值得一提的是,groupby函数的作用之一就是按groupby的列字段,进行了set_index,所以为了数据整齐,往往groupby函数之后,就会接一个reset_index重新赋值索引。
1-5都是返回数据框
6、7是返回索引

下面一个个来之前,可以讲下2,4带axis和1,3不带axis函数的区别,
其实没什么区别,基本上用2,4写出来的代码可以1,3等价的加出来

1,3不带axis函数在函数函数中必须指明index或columns中的至少一个,也可以两个都指明,然后再写上index或columns中值的更改后的对应关系,而2,4带axis函数在函数参数中不须指明index或columns,只需要写上index或columns中值的更改后的对应关系,并用axis=0表示,更改的是index;用axis=1表示,更改的是columns;
另外,2,4带axis函数好像不能同时改变index或columns,这点不确定对不对。

rename

1.DataFrame.rename(index=None, columns=None, **kwargs)

参数

  1. index, columns : scalar, list-like, dict-like or function, optional,标量,形如列表或字典或函数但(Function/dict值必须是一对一)

  2. copy : boolean, default True(是否复制底层函数,默认复制)

  3. inplace : boolean, default False(是否替换原对象,默认不替换)

  4. level:int or level name, default None(多层索引时使用)

    扫描二维码关注公众号,回复: 5982652 查看本文章

    返回DataFrame

 In [1]: import pandas as pd
   ...: df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
   ...: df
Out[1]: 
   A  B
0  1  4
1  2  5
2  3  6
# df 本身并没有变没有被替换

In [2]: df.rename(index={0:3,1:4,2:5}, columns={"A": "a", "C": "c"})
Out[2]: 
   a  B
3  1  4
4  2  5
5  3  6
# df 本身并没有变没有被替换

rename_axis

DataFrame.rename_axis(mapper, axis=0, copy=True, inplace=False)

参数

  1. mapper : scalar, list-like, dict-like or function, optional

  2. axis : int or string, default 0

  3. copy : boolean, default True

  4. inplace : boolean, default False

    返回DataFrame

In [1]: import pandas as pd
   ...: df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
   ...: df
Out[1]: 
   A  B
0  1  4
1  2  5
2  3  6

In [2]: df.rename_axis({0:3,1:4,2:5})
Out[2]: 
   A  B
3  1  4
4  2  5
5  3  6

In [3]: df.rename_axis({"A": "a", "C": "c"},axis=1)
Out[3]: 
   a  B
0  1  4
1  2  5
2  3  6

reindex()

DataFrame.reindex(index=None, columns=None, **kwargs)
增加、减少、筛选过滤索引(或列),如果搜索或列还存在,就按照原来的值,如果不存在,就按指定的填充方式填充数据或填空值

参数

  1. index, columns : array-like, optional (can be specified in order, or as
  2. method : {None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’}, optional(填充设置)
  3. copy : boolean, default True
  4. level : int or name
  5. fill_value : scalar, default np.NaN
  6. limit : int, default None
  7. tolerance : optional

返回DataFrame

import pandas as pd
df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
df
Out[1]: 
   A  B
0  1  4
1  2  5
2  3  6

df.reindex(index=(1,2,3))
Out[2]: 
     A    B
1  2.0  5.0
2  3.0  6.0
3  NaN  NaN

df.reindex(columns=("B","C"))
Out[3]: 
   B   C
0  4 NaN
1  5 NaN
2  6 NaN
reindex没有inlace参数,本身不支持替换,想替换就df=df.reindex(columns=("B","C"))

reindex_axis

DataFrame.reindex_axis(labels, axis=0, method=None, level=None, copy=True, limit=None, fill_value=nan)

参数

  1. labels : array-like
  2. axis : {0 or ‘index’, 1 or ‘columns’}
  3. method : {None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’}, optional(填充设置)
  4. copy : boolean, default True
  5. level : int or name
  6. limit : int, default None
  7. tolerance : optional

返回DataFrame

In [1]: import pandas as pd
   ...: df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
   ...: df
Out[1]: 
   A  B
0  1  4
1  2  5
2  3  6

In [2]: df.reindex_axis((1,2,3))
Out[2]: 
     A    B
1  2.0  5.0
2  3.0  6.0
3  NaN  NaN

In [3]: df.reindex_axis(("B","C"),axis=1)
Out[3]: 
   B   C
0  4 NaN
1  5 NaN
2  6 NaN

reset_index

DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=’’)
函数作用是重新赋值索引,从0开始,和之前的索引没什么关系了,

参数

  1. level : int, str, tuple, or list, default None
  2. drop : boolean, default False是否抛弃原索引,否则还原为普通列,
  3. inplace : boolean, default False是否替换原df
  4. col_level : int or str, default 0
  5. col_fill : object, default ‘’

返回DataFrame

In [1]: import pandas as pd
   ...: df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
   ...: df=df.reindex_axis((1,2,3))
   ...: df
Out[1]: 
     A    B
1  2.0  5.0
2  3.0  6.0
3  NaN  NaN

In [2]: df.reset_index()
Out[2]: 
   index    A    B
0      1  2.0  5.0
1      2  3.0  6.0
2      3  NaN  NaN

reset_index在数据清理,整理中的意义,
把通过groupby函数分组后优点乱的数据(groupby的字段变成了索引)变的更加整齐,如groupby后的数据为
coupon_id data_received
user——ID
14394081 1078 20160319
110025 20160528
58945 20160623
18326241 7630 20160429
20292323 15462 20160129
11737 20160519

通过reset_index后变为整齐的

 user——ID        coupon_id    data_received
 14394081         1078            20160319
 14394081         110025          20160528
 14394081         58945           20160623
 18326241         7630            20160429
 20292323         15462           20160129
 20292323         11737           20160519

set_index

set_index方法是将某一列做为索引,而reset_index是从新按int升序的方式做了一个索引
就是和reset_index()相反的操作
常常groupby的作用和set_index()作用一样
把groupby的列字段作为了索引

Index.reindex

Index.set_names

不是很常用,返回的是索引类

猜你喜欢

转载自blog.csdn.net/zlb872551601/article/details/84723724
今日推荐