pandas中索引重置set_index和reset_index的⽤法1.set_index
DataFrame可以通过set_index⽅法,可以设置单索引和复合索引。
DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['a','b'])  #新建⼀个数据框,索引为空。
print(df)
输出结果:
Empty DataFrame
Columns: [a, b]
Index: []
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['a','b'],index=[0,8,9,0])  #新建⼀个数据框,并设置索引
print(df)
输出结果:
a    b
0  NaN  NaN
8  NaN  NaN
9  NaN  NaN
0  NaN  NaN
#因为'a','b'列还没有赋值,故默认为空值。
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['a','b'],index=[0,1,2,3])  #新建⼀个数据框,并设置索引
a = pd.Series(['bar','bar','foo','zoo'])
b = pd.Series(['one','two','one','shree'],index=[0,1,2,3])
c = pd.Series(['z','x','y','d'])
d = pd.Series([1,5,7,9])
df['a'] = a
df['b'] = b
df['c'] =c
df['d'] =d
print(df)
输出:
a      b  c  d
0  bar    one  z  1
1  bar    two  x  5
2  foo    one  y  7
3  zoo  shree  d  9
#4个series给数据框赋值,在初始化dataframe的时候并没有设定c.d列,赋值的时候默认⽤c、d两个
#series的变量名字作为了列索引(字段名)
indexed1 = df.set_index('c',append=True)  #新增c列设置为索引,参数append=True
indexed1
输出:
indexed1 = df.set_index('c',append=False)  #将c列设置为索引,参数append=False
indexed1exists的用法
输出:
indexed1 = df.set_index('c',drop=False) #设置参数drop=False(默认是True),更新索引的同时保持c列存在。indexed1
输出:
indexed1 = df.set_index(['c','d'],drop=False) #设置参数drop=False(默认是True),更新索引的同时保持c,d列存在。indexed1
输出:
reset_index可以还原索引,重新变为默认的整型索引
level控制了具体要还原的哪个等级的索引
drop为False则索引列会被还原为普通列,否则会丢失该列数据,慎重使⽤。
indexed1 = df.set_index(['c','d'],drop=False) #设置参数drop=False(默认是True),更新索引的同时保持c,d列存在。indexed1
输出:
错误提⽰:ValueError: cannot insert d, already exists
因为上⼀步保留了c,d列,因此还原的时候出现冲突,提⽰已经存在,做如下修改。
indexed1 = df.set_index(['c','d']) #设置参数drop=False(默认是True),更新索引的同时保持c,d列存在。
indexed1
输出:
当我们在清洗数据时往往会将带有空值的⾏删除,不论是DataFrame还是Series的index都将不再是连续的索引了,那么这个时候我们可以使⽤reset_index()⽅法来重置它们的索引,以便后续的操作。
具体例⼦:
import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(20).reshape(5,4),index=[1,3,4,6,8])
print(df)
输出:
set_index())
输出:
可以看到此时获得了新的index列,⽽原来的index变成了我们的数据列,保留了下来。
如果我们不想保留原来的index为普通列,直接使⽤重置后的索引,那么可以使⽤参数drop=True,默认值是False
set_index(drop=True))
这⾥写这个的⽬的是为了后⾯对数据处理的应⽤:举个例⼦,
新建⼀个空的DataFrame,只有列索引,没有对应的数据,当你需要引⽤对应的Series数据到DataFrame中时,
如果每个Series的index都不⼀样,那么添加时就会出现NaN值,甚⾄是错误提⽰:
ValueError: cannot reindex from a duplicate axis。
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['a','b'])
print(df)
print("--------------------")
b = pd.Series([1,1,1,1,1],index=[0,1,3,4,5])
a = pd.Series([2,2,2,2,2,2],index=[1,2,3,4,6,7])
df['a'] = a
df['b'] = b
print(df)
输出:
明显看到b的2索引为空值,这是因为b没有2这个索引,
如果我们需要它们从0开始按⼀个顺序排列,那么我们需要使⽤reset_index()的处理。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。