pandas—DataFrame索引设置
程序员文章站
2022-09-21 09:59:29
在Python中,dataframe可以使用默认行列索引,也可以自行设置索引。行、列索引 的修改对于DataFrame,如果需要对索引进行修改,可以通过 index 和 columns 参数来进行操作,也可以通过 rename() 方式实现。新建一个DataFrameimport pandas as pddf = pd.DataFrame ([['a','A'],['b','B'],['c','C']],index=[1,2,3],columns=['小写','大写'])df# 返回小...
在Python中,dataframe可以使用默认行列索引,也可以自行设置索引。
查看索引
新建一个DataFrame
import pandas as pd
df = pd.DataFrame ([['a','A'],['b','B'],['c','C']],index=[1,2,3],columns=['小写','大写']) df # 返回 小写 大写 1 a A 2 b B 3 c C
- 获取列索引
# 获取列索引 df.columns # 返回 Index(['小写', '大写'], dtype='object')
- 获取行索引
# 获取行索引 df.index # 返回 Int64Index([1, 2, 3], dtype='int64')
行、列索引的修改
对于DataFrame,如果需要对索引进行修改,可以通过 index 和 columns 参数来进行操作,也可以通过 rename() 方式实现。
- 修改行索引:index
# 将行索引改变为一二三 df.index = list("一二三") df # 返回 小写 大写
一 a A
二 b B
三 c C
- 修改列索引:columns
# 将列索引改为l,u df.columns = list('lu') df # 返回 l u
一 a A
二 b B
三 c C
-
raname()方法
格式:df.rename(索引参数={},inplace = False/True)
其中inplace参数为False时,不修改原数据,为True时,会对原数据修改。默认False
示例:将 df 的行索引变为123,列索引变为“小写”,“大写”,并将修改结果返回给 df
df.rename(index = {"一":1,"二":2,"三":3},columns = {"l":"小写","u":"大写"},inplace = True) df # 返回 小写 大写 1 a A 2 b B 3 c C
将数据列设置为索引列
-
将列转化为索引
在创建好一个DataFrame后,可以通过 set_index() 方法将其中的一列或多列设置为索引列。
格式:df.set_index(keys, drop, append, inplace)
参数:
keys:设置为索引的列名称
drop:是否删除被设为索引的列,默认True(删除)。
append:是否将新索引列附加到旧索引列上,默认False(不附加)
inplace:是否修改原数据,默认False(不修改)
'''创建一个df,并按照A列排序''' import pandas as pd import numpy as np
df = pd.DataFrame(np.arange(16).reshape((4,4)),index = list('abcd'),columns=['A','B','C','D']) df['rank']=df['A'].rank(method='first') df # 返回 A B C D rank
a 0 1 2 3 1.0 b 4 5 6 7 2.0 c 8 9 10 11 3.0 d 12 13 14 15 4.0 '''将rank设为新的索引''' df.set_index('rank') # 返回 A B C D
rank 1.0 0 1 2 3 2.0 4 5 6 7 3.0 8 9 10 11 4.0 12 13 14 15 '''设置多层次索引''' df.set_index(['A','B']) # 返回 C D rank
A B 0 1 2 3 1.0 4 5 6 7 2.0 8 9 10 11 3.0 12 13 14 15 4.0 '''对比drop参数''' df.set_index('rank',drop=False) # 返回 A B C D rank
rank 1.0 0 1 2 3 1.0 2.0 4 5 6 7 2.0 3.0 8 9 10 11 3.0 4.0 12 13 14 15 4.0 '''对比append参数''' df.set_index('rank',append=True) # 返回 A B C D
rank
a 1.0 0 1 2 3 b 2.0 4 5 6 7 c 3.0 8 9 10 11 d 4.0 12 13 14 15
-
将索引转化为列
reset_index()方法可以将索引重新转化为列
格式:reset_index(level, drop, inplace)
参数:
level:用于指定要将层次化索引的第几层转化为columns,第一个索引为0级,第二个为1级,默认为None(全部索引)。
drop:是否删除索引列,默认False。
inplace:是否修改原数据,默认False(不修改)
# 创建一个df_reset df_set = df.set_index(["A","B"]) df_set # 返回 C D rank
A B 0 1 2 3 1.0 4 5 6 7 2.0 8 9 10 11 3.0 12 13 14 15 4.0 # 将A、B索隐列重新转化为列 df_reset = df_set.reset_index(['A','B']) df_reset # 返回 A B C D rank 0 0 1 2 3 1.0 1 4 5 6 7 2.0 2 8 9 10 11 3.0 3 12 13 14 15 4.0
索引切片
DataFrame可以对行,列通过索引进行切片处理。
注意:在pandas、numpy中,切片的结果是产生一个视图,对切片数据进行修改后,会影响到原始数据。(但在list 中进行切片产生的事copy副本)
# 新建一个DataFrame import pandas as pd import numpy as np
df1 = pd.DataFrame(np.arange(16).reshape((4,4)),index = [1,2,3,4],columns=['A','B','C','D']) df1 # 返回 A B C D 1 0 1 2 3 2 4 5 6 7 3 8 9 10 11 4 12 13 14 15
-
选取单列
传入需要提取的列名
df1["A"] # 返回 1 0 2 4 3 8 4 12 Name: A, dtype: int32
-
选取多列
将需要的列名,以列表的形式传入
df1[["A",'B']] # 返回 A B 1 0 1 2 4 5 3 8 9 4 12 13
-
选取单行
传入所需行号
df1[2:3] # 返回 A B C D 3 8 9 10 11
-
选取多行
和选取单行方法一样(强迫症0.0)
df1[:3] # 返回 A B C D 1 0 1 2 3 2 4 5 6 7 3 8 9 10 11
-
按条件选取行
感觉这个方法只适用单列单条件情景,还是推荐使用pandas中的loc函数
df1[df1["A"]>5] # 返回 A B C D 3 8 9 10 11 4 12 13 14 15
-
切片产生的是个视图,修改切片会影响原始数据
(下面有两个需要注意的地方)
# 对 df1 的A列进行切片,并赋值给 t ,此时 t 是 df1 的一个视图,对 t 修改,会另 df1 产生变化。 import pandas as pd import numpy as np
df1 = pd.DataFrame(np.arange(16).reshape((4,4)),index = [1,2,3,4],columns=['A','B','C','D']) print(df1) t = df1["A"] t[1] = 100 # 注意: 由于已经设置了索引,这里就是t[1],而不是t[0] df1 # 返回 A B C D 1 0 1 2 3 2 4 5 6 7 3 8 9 10 11 4 12 13 14 15 A B C D 1 100 1 2 3 2 4 5 6 7 3 8 9 10 11 4 12 13 14 15 # 需要注意的是,如果想要对 t 整体修改,需要以 t 的切片来完成 # 注意: 如果写成 t = [0,0,0,0]则是对 t 重新进行了赋值 t[:] = [0,0,0,0] print(df1) A B C D 1 0 1 2 3 2 0 5 6 7 3 0 9 10 11 4 0 13 14 15
本文地址:https://blog.csdn.net/weixin_44830542/article/details/108208493
推荐阅读
-
Python DataFrame 设置输出不显示index(索引)值的方法
-
python pandas 对series和dataframe的重置索引reindex方法
-
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
-
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
-
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
-
Pandas中关于数据索引iloc()和loc()的用法和区别
-
对Pandas DataFrame缺失值的查找与填充示例讲解
-
解决pandas.DataFrame.fillna 填充Nan失败的问题
-
第九节:pandas打印设置
-
Pandas:DataFrame对象的基础操作方法