别人没那么重要,我也没那么重要,好好活着,把能做的小事做好,够不到的东西就放弃,承认就好。做一个心情好能睡着的人,你所有事情都会在正轨上。

Python数据分析-数据抽取-DataFrame 的loc和iloc用法

1. 主要内容

  • 抽取一行数据
  • 抽取多行数据
  • 抽取指定列数据
  • 抽取指定行、列数据
  • 按指定条件抽取数据

声明:该笔记来源于笔者上课学习笔记。以一个实例来解释用法

API 补充:

  • pandas.DataFrame.loc

  该方法主要基于标签,但也可以与布尔数组一起使用。

  可支持输入参数:

    • 单独一个标签,如 5 或者 'a' (注意:5 被解释为索引的标签,而不是索引所代表的整数位置。)
    • 标签列表,如 ['a', 'b', 'c']
    • 带有标签的切片对象,如 'a' : 'f' (此切片与通常的python的切片不同,开始和停止都包含在内)

  官方解释补充:

          

  代码示例:

 1 df = pd.DataFrame([[1, 2], [4, 5], [7, 8]], index=['cobra', 'viper', 'sidewinder'], columns=['max_speed', 'shield'])
 2 print(df)
 3 print("单一标签,将作为Series返回:")
 4 df1 = df.loc['viper']
 5 print(df1)
 6 df2 = df.loc[['viper', 'sidewinder']]
 7 print(df2)
 8 ### 结果
 9             max_speed  shield
10 cobra               1       2
11 viper               4       5
12 sidewinder          7       8
13 单一标签,将作为Series返回:
14 max_speed    4
15 shield       5
16 Name: viper, dtype: int64

  标签列表,将作为DataFrame返回

1 df.loc[['viper', 'sidewinder']]
2 
3 ### 结果
4             max_speed  shield
5 viper               4       5
6 sidewinder          7       8

  行和列的单一标签

1 df.loc['cobra', 'shield']
2 
3 ### 结果
4 2

  切片索引(开始和停止都包含在内)

1 df.loc['cobra':'viper', 'max_speed']
2 
3 ### 结果
4 cobra    1
5 viper    4
6 Name: max_speed, dtype: int64

  与行轴长度相同的布尔列表

1 df.loc[[False, False, True]]
2 
3 ### 结果
4             max_speed  shield
5 sidewinder          7       8

  可对齐布尔级数

1 df.loc[pd.Series([False, True, False], index=['viper', 'sidewinder', 'cobra'])]
2 
3 ### 结果
4                      max_speed  shield
5 sidewinder          7       8

  Index(与df.reindex效果相同)

1 df.loc[pd.Index(["cobra", "viper"], name="foo")]
2 
3 ### 结果
4        max_speed  shield
5 foo
6 cobra          1       2
7 viper          4       5

  返回一个布尔系列的条件(与下第7点一样,根据条件提取数据)

1 df.loc[df['shield'] > 6]
2 
3 ### 结果
4             max_speed  shield
5 sidewinder          7       8
1 df.loc[df['shield'] > 6, ['max_speed']]
2 
3 ### 结果
4             max_speed
5 sidewinder          7
1 f.loc[(df['max_speed'] > 1) & (df['shield'] < 8)]
2 
3 ### 结果
4             max_speed  shield
5 viper          4       5
1 df.loc[(df['max_speed'] > 4) | (df['shield'] < 5)]
2 
3 ### 结果
4             max_speed  shield
5 cobra               1       2
6 sidewinder          7       8
  • pandas.DataFrame.iloc

  用于按位置选择的整数位置索引。 从(0到轴的长度-1),但也可以与布尔数组一起使用。

  可支持输入参数:

    • 一个整数 5
    • 一个整数列表 [4, 3, 0]
    • 整数切片 1:7
    • bool列表
    • 具有一个参数(调用Series或DataFrame)的可调用函数,并返回用于索引的有效输出(上述之一)
    • 由行和列索引组成的元组,元组元素由上述输入之一组成 (0, 1)
    • 注意:该函数如果在索引越界的时候会引发 IndexError异常

  代码示例:

  操作数据表,由字典转成DataFrame

1 mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
2           {'a': 100, 'b': 200, 'c': 300, 'd': 400},
3           {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000}]
4 df = pd.DataFrame(mydict)

  整数索引

1 df.iloc[0]
2 
3 ### 结果
4 a    1
5 b    2
6 c    3
7 d    4
8 Name: 0, dtype: int64

  整数列表索引

df.iloc[[0]]

### 结果
   a  b  c  d
0  1  2  3  4

###########

df.iloc[[0, 1]]

### 结果
     a    b    c    d
0    1    2    3    4
1  100  200  300  400

  切片索引

1 df.iloc[:3]
2 
3 ### 结果
4       a     b     c     d
5 0     1     2     3     4
6 1   100   200   300   400
7 2  1000  2000  3000  4000

  可对齐布尔级数

1 df.iloc[[True, False, True]]
2 
3 ### 结果
4       a     b     c     d
5 0     1     2     3     4
6 2  1000  2000  3000  4000

  可调用函数

1 df.iloc[lambda x: x.index % 2 == 0]
2 
3 ### 结果
4       a     b     c     d
5 0     1     2     3     4
6 2  1000  2000  3000  4000

  两轴分度作为参数传入

1 df.iloc[0, 1]
2 
3 ### 结果
4 2
1 df.iloc[[0, 2], [1, 3]]
2 
3 ### 结果
4       b     d
5 0     2     4
6 2  2000  4000
1 df.iloc[1:3, 0:3]
2 
3 ### 结果
4       a     b     c
5 1   100   200   300
6 2  1000  2000  3000
1 df.iloc[:, [True, False, True, False]]
2 
3 ### 结果
4       a     c
5 0     1     3
6 1   100   300
7 2  1000  3000
1 df.iloc[:, lambda df: [0, 2]]
2 
3 ### 结果
4       a     c
5 0     1     3
6 1   100   300
7 2  1000  3000

2. 操作数据导入

1 import pandas as pd
2 pd.set_option('display.unicode.east_asian_width', True)
3 
4 data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115, 140]]
5 name = ['明月', '七月流火', '高袁圆', ' 二月二']
6 columns = ['语文', '数学', '英语']
7 df=pd.DataFrame(data=data,index=name, columns=columns)
8 print(df.shape)
9 print(df)

3. 取某一行某一列的特定值

1 df.loc[1,2]    # 必须用索引名称,如果没有重写,就可以用数字索引
2 df.iloc[1,2]   # iloc必须用索引位置编号,可用于循环遍历,因为用数字索引

4. 同时取某几行,某几列

  先写行,再写列

区别于以上的方法:需要用[ ]将多个索引值做成list

1 df.loc[['七月流火'],['数学','英语']]
2 df.iloc[1, [1, 2]]

5. 提取一整行数据

1 df.loc[‘高袁圆’,’语文’:’英语’]
2 df.loc[‘高袁圆’,:]   #'高袁圆'的所有成绩
3 df.loc[‘高袁圆’]
4 df.iloc[[1, 3]]  # 只找第1和3行的所有数据

6. 获取一整列或几列

1 df.iloc[: ,[0,2]]      # 0和2列的所有行
2 
3 df[‘语文’]                # 全班语文成绩   ----〉 提取一整列
4 df[[‘语文’, ‘英语’]]      # 全班语文和英语成绩 ----〉 提取多列
5 # 丄 同时提取多个行,省略第二个参数,第一个参数要用[ ]做成list

7. 提高

  loc 除了根据行索引和列索引来提取数据,还可以根据条件表达式来提取。

1 df.loc[df['语文'] > 105]

 

时间:2024年2月1日(初稿)

时间:2024年2月2日(修改)

 

posted @ 2024-02-01 17:14  一路狂奔的乌龟  阅读(389)  评论(0)    收藏  举报
返回顶部