pandas索引使用方法

pandas数据类型的取值方式

(后期进行补充)

数据类型

生成方式及数据结构(简洁版):
详细版(请点击查看

import pandas as pd
ds = pd.Series([])
df = pd.DataFrame(data=[[22, "北京", "律师" ],
                        [26, "四川成都", "工程师"],
                        [24, "江苏南京", "研究员"]],
                  index=["张某", "李某", "段某"],
                  columns=["age", "籍贯", "职业"])

运行结果:

张某    22
李某    26
段某    24
Name: ds_name, dtype: int64
    age    籍贯   职业
张某   22    北京   律师
李某   26  四川成都  工程师
段某   24  江苏南京  研究员

在这里插入图片描述

在这里插入图片描述
由此可见:
Series数据结构中有:index , values , name , dtype
DataFrame数据结构中有:df.columns , df.columns.name, df.index, df.index.names, df.values

DataFrame的取值

列索引取值

DataFrame() 数据结构,这里用 df 代表pd.DataFrame(数据) ,如下表:

输入输出
df.列名取出单列,输出格式为Series
df[列名]取出单列,输出格式为Series
df[ [列名] ]取出单列,输出格式为DataFrame
df[ [列名1,列名2, 列名3, ……] ]取出各个列对应的元素,输出格式为DataFrame

代码段:

import pandas as pd
df = pd.DataFrame(data=[[22, "北京", "律师" ],
                        [26, "四川成都", "工程师"],
                        [24, "江苏南京", "研究员"]],
                  index=["张某", "李某", "段某"],
                  columns=["age", "籍贯", "职业"])
df_age = df["age"]
df_age1 = df.age
df_age2 = df[["age"]]
print(df_age, type(df_age))
print(df_age1, type(df_age1))
print(df_age2, type(df_age2))
print(df[["age", "籍贯"]], type(df[["age", "籍贯"]]))

注意:当我们转换成Series结构后,可以通过下标和值均可以相互获取
解释如下:
pd.Series结构:

import pandas as pd
df = pd.DataFrame(data=[[22, "北京", "律师" ],
                        [26, "四川成都", "工程师"],
                        [24, "江苏南京", "研究员"]],
                  index=["张某", "李某", "段某"],
                  columns=["age", "籍贯", "职业"])
df_age = df["age"]

# 通过下标获得值:
print(df_age[0])	# 也可以是;
print(df_age["张某"])
# 通过值获得下标:(注意下面两者的区别)
print(df_age[df_age.values==22].index)
print(df_age[df_age.values==22].index[0])

运行结果:

22
22
Index(['李某'], dtype='object')
李某

取行方式

通过切片方式选取多行

import pandas as pd
df = pd.DataFrame(data=[[22, "北京", "律师" ],
                        [26, "四川成都", "工程师"],
                        [24, "江苏南京", "研究员"]],
                  index=["张某", "李某", "段某"],
                  columns=["age", "籍贯", "职业"])
print(df["张某": "段某": 2])
这里的 2 代表步长,
["张某": "段某": 2] = [下界 : 上界 : 步长]  
注意这里使用的是一个中括号。

运行结果:

      age    籍贯   职业
Name                
张某     22    北京   律师
段某     24  江苏南京  研究员

注意:

df["作为下界的列名":  "作为上界的列名" : 步长] ----> 错误错误错误!!!

loc() 方法

1.直接使用方法:
有一个参数:	 df.loc[行索引]   
			 df.loc[ [行index] ]
			 df.loc[ [行index1, 行index2, 行index3 , ……] ] 	
			 下面会解释两者的区别,且听我娓娓道来
两个参数: 横纵联合 : df.loc[row横_label, col纵_label]
		同样的也有: 
		df.loc[ [row横_label1, row横_label2, ……], [col纵_label1, col纵_label2, ……]]

注意横向(行索引 index)是必备的。

代码实战:

import pandas as pd
df = pd.DataFrame(data=[[22, "北京", "律师" ],
                        [26, "四川成都", "工程师"],
                        [24, "江苏南京", "研究员"],
                        [11, "山东青岛", "医生"]],
                  index=pd.Index(["张某", "李某", "段某", "段某"], name="Name"),
                  columns=["age", "籍贯", "职业"])
print(df.loc["张某"], type(df.loc["张某"]))     ## 张某 在data中 只有一个
print()
print(df.loc[["张某"]], type(df.loc[["张某"]]))
print()
print(df.loc["段某"], type(df.loc["段某"]))     ## 段某 在data中 有多个
print()
df_s = df.loc["张某"]["age"]   # 先执行df.loc["张某"],再从完成的结果中执行["age"]
df_s1 = df.loc["张某", "age"]
print(df_s)
print()
print(df_s1)
# print(df.loc["age"]) (错误代码) #因为这是列名,第一个取值不能是列名 

运行结果:

print(df.loc["张某"], type(df.loc["张某"]))
age    22
籍贯     北京
职业     律师
Name: 张某, dtype: object <class 'pandas.core.series.Series'>

print(df.loc[["张某"]], type(df.loc[["张某"]]))
      age  籍贯  职业
Name             
张某     22  北京  律师 <class 'pandas.core.frame.DataFrame'>

print(df.loc["段某"], type(df.loc["段某"])) 
      age    籍贯   职业
Name                
段某     24  江苏南京  研究员
段某     11  山东青岛   医生 <class 'pandas.core.frame.DataFrame'>

22

22 ##注意这里取出的 22 的程序执行方式不同。

#解释:

df.loc[唯一的行索引]    --> 如果行index是唯一的数据,则它的输出结构是Series
df.loc[ [唯一的行索引] ] --> 如果我们想要唯一index,且输出结构为DataFrame框架, 便可以使用这个。
df.loc[ 存在多个行index ] --> 如果这个行index的名称是多个的,则将会是DataFrame

变量名.loc[ [行index1, 行index2, ……] ] 选取多行

df_s_n = df.loc[["张某", "段某"]]
print(df_s_n)

运行结果:

      age    籍贯   职业
Name                
张某     22    北京   律师
段某     24  江苏南京  研究员

简化记忆:

上面描述的多值选取的情况:

df.loc[ [行index1, 行index2, 行index3 , ……] ] 	
df.loc[ [row横_label1, row横_label2, ……], [col纵_label1, col纵_label2, ……]]

如果所选参数是唯一值(程序执行过程中不会产生歧义),那么就可以使用切片的方式来表示 一一填写列举的 列表。
意思:(不会产生歧义的情况下)

df.loc[ [行index1, 行index2, 行index3 , ……] ]  = df.loc[行index1 : 行index2:步长]
注意,df.loc[] 是固定的,而是使用: 
[行index1, 行index2, 行index3 , ……]  == [行index1 : 行index2:步长]
代替了列表中一一列举的元素。

总结:用列表生成的方式,代替了一一列举元素的列表

2.条件使用法
df.loc[  进行筛选的条件  ] -- 如果条件为真,则选出符合条件的结果。
复合条件:  &(且 = 与) , |(或) ,  ~(取反 = 非) 
通过筛选函数进行筛选, 常见的有 isin(), where() 等。

	注意(筛选函数 = 限定条件的函数。 
		  这里的筛选函数是瞎编的,具体有哪些我不清楚)

简单实战代码:

import pandas as pd
df = pd.DataFrame(data=[[22, "北京", "律师" ],
                        [26, "四川成都", "工程师"],
                        [24, "江苏南京", "研究员"],
                        [11, "山东青岛", "医生"]],
                  index=pd.Index(["张某", "李某", "段某", "段某"], name="Name"),
                  columns=["age", "籍贯", "职业"])
result1 = df.loc[df.index == "张某"]
print(result1)     # 等式条件
print("**"*6)
result2 = df["age"].loc[df["age"] > 20]
print(result2)    # 不等式条件
print("**"*6)
res = (df.index == "张某") & (df["age"] > 20)
print(df.loc[res])      # 混合条件

运行结果:

      age  籍贯  职业
Name             
张某     22  北京  律师
************
Name
张某    22
李某    26
段某    24
Name: age, dtype: int64
************
      age  籍贯  职业
Name             
张某     22  北京  律师

iloc() 方法

iloc 的使用与 loc 完全类似,只不过是针对**位置( = 第几个 )**进行筛选
.iloc[ 整数、整数列表、整数切片、布尔列表以及函数 ]
解释: [ ]里面的使用方法同.loc[ ] 方法。

这里介绍一下:.iloc[ 函数 ]

  1. 函数 = 自定义函数 (函数的返回值需要是合法对象 (= 整数、整数列表、整数切片、布尔列表))

  2. 匿名函数 lambda : 使用方法:

    lambda x: slice(1, 4)
    lambda 自变量: slice(start = 下界, stop = 上界, step = 步长)
    代码实战:

res_lambda = df.iloc[lambda x: slice(1, 4)]
print(res_lambda)

运行结果:

      age    籍贯   职业
Name                
李某     26  四川成都  工程师
段某     24  江苏南京  研究员
段某     11  山东青岛   医生

可以从此处得知:
slice() 是不包含 stop 的

query() 方法

使用方法:

df.query( 字符串形式 ) 
把字符串形式的查询表达式传入 query 方法来查询数据

Series取值

常见取值方式:
请点击查看

行索引取值

写法功能
变量名[ index具体内容 ]index对应的值
变量名[ [index1, index2, index3, ……… ] ]依次提取对应行的值
变量名[ 下限index1 : 上限index2 : 步长]在下限的基础上,取出步长的行,并遇到上限就截止

以上的index也可以由数字表示。

代码实战:

import pandas as pd
s = pd.Series(data=[1, 2, 3, 4, 5, 6],
              index=['a', 'b', 'a', 'a', 'a', 'c'])
print(s["a"])
print("-----------------")
print(s[["b", "c"]])
print("-----------------")
print(s["b": "c"])
print("-----------------")
print(s["b": "c": 2])
print("-----------------")
print(s["b": "c": 18])

运行结果:

a    1
a    3
a    4
a    5
dtype: int64
------------------
b    2
c    6
dtype: int64
-----------------
b    2
a    3
a    4
a    5
c    6
dtype: int64
-----------------
b    2
a    4
c    6
dtype: int64
-----------------
b    2
dtype: int64

下面是通过数值进行取的

import pandas as pd 
s = pd.Series(['a', 'b', 'c', 'd', 'e', 'f'], index=[1, 3, 1, 2, 5, 4])
print(s[1])
print("-----------------")
print(s[1: -1: 2])

运行结果:

1    a
1    c
dtype: object
-----------------
3    b
2    d
dtype: object
  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值