1 建立索引
import pandas as pd
# 创建DataFrame时指定索引
df = pd.DataFrame({
'name':['n1','n2','n3'],
'age':[24,25,29]
}, index=list('abc')) # 也可以使用index=['a','b','c']
df
# 读取文件时指定单列索引
pd.read_excel('stu_data.xlsx',index_col='学号')
# 读取文件时指定多列索引(不可以再使用名称了,需要使用索引位置值)
pd.read_excel('stu_data.xlsx',index_col=[0,1])
2.指定列为索引列
# df.set_index(
# keys :被指定为索引的列名,复合索引用 list:格式提供
# drop = True :建立索引后是否删除该列
# append = False :是否在原索引基础上添加索引,默认是直接替换原索引
# inplace = False :是否直接修改原数据框 ) !!!!由于测试,这里均不直接修改原数据表!!!!
df = pd.read_excel('stu_data.xlsx')
# 当我们已经生成DataFrame后,需要指定列为索引列
# 指定一列为索引列
df.set_index(keys='学号')
# 指定多列为索引列
df.set_index(keys=['学号','性别'])
# 指定多列,不删除原数据列
df.set_index(keys=['学号','性别'],drop=False)
# 与原索引进行拼接索引
df.set_index(keys=['性别'],append=True)
3.还原索引列
# 设置索引列
df = pd.read_excel('stu_data.xlsx')
df.set_index(keys='学号',inplace=True)
# 还原索引列
# df.reset_index(
# drop = False :是否将原索引直接删除,而不是还原为变量列
# inplace = False :是否直接修改原数据框
# )
df.reset_index()
4.修改索引
df = pd.read_excel('stu_data.xlsx')
df = df.set_index('学号')
# 修改单行索引名称
df.index.name = 'sno'
df
df = pd.read_excel('stu_data.xlsx')
df = df.set_index(['学号','性别'])
# 修改单行索引名称
df.index.names = ['sno','sex'] # 可以设置为空None
df
# 修改索引值
df = pd.DataFrame({
'name':['gz','sz','sh'],
'money':[100,200,300]
},index=list("abc"))
df.index = ['A','B','D']
df
5.更新索引
reindex 则可以使用数据框中不存在的数值建立索引,并据此扩充新索引值对应的索引行/列,同时进行缺失值填充操作。
df.reindex(
labels :类数组结构的数值,将按此数值重建索引,非必需
copy = True :建立新对象而不是直接更改原 df/series 缺失数据的处理方式
method :针对已经排序过的索引,确定数据单元格无数据时的填充方法,非必需
pad / ffill:用前面的有效数值填充
backfill / bfill:用后面的有效数值填充
nearest:使用最接近的数值逬行填充
fill_value = np.NaN :将缺失值用什么数值替代
limit = None :向前/向后填充时的最大步长
)
import pandas as pd
df = pd.DataFrame({
'name':['zs','ls','ww'],
'level':['vip1','vip2','pm']
})
# 更新索引:通过索引选择出原先有哪些对应的存入表中,如果原先表不存在索引则用NaN填充
# 不进行填充
df.reindex([0,1,3])
# 用前面的有效数值进行填充
df.reindex([0,1,2,3,4],method='ffill')
# 指定数值进行填充
df.reindex([0,1,2,3,4,5],fill_value=5)