pandas DataFrame的行、列索引与条件过滤

DataFrame的行、列索引

函数功能
df.loc[val]根据标签选择单行或多行
df.iloc[where]根据整数位置选择单行或多行
df.loc[:,:]根据标签选择多行多列[行,列],用法和numpy切片的区别见下文
df.iloc[:,:]根据整数位置选择多行多列[行,列] ,用法和numpy切片一致
reindex方法通过标签选择行或列
get_value, set_value根据行和列的标签设置单个值
import numpy as np
import pandas as pd
In [40]: data = pd.DataFrame(np.arange(16).reshape((4,4)))
In [41]: data
Out[41]:
    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15

# 列索引
In [43]: data[2]     #索引单列
Out[43]:
0     2
1     6
2    10
3    14
Name: 2, dtype: int64
In [44]: data[[1,2]] #索引多列
Out[44]:
    1   2
0   1   2
1   5   6
2   9  10
3  13  14

# 行索引
In [45]: data.loc[3]     #索引单行
Out[45]:
0    12
1    13
2    14
3    15
Name: 3, dtype: int64
In [46]: data.loc[[2,0]] #索引多行
Out[46]:
   0  1   2   3
2  8  9  10  11
0  0  1   2   3

# 注意:选择多行或多列时,要用[]括起来,且之间用,隔开

DataFrame的切片和numpy切片的区别:
(1)pd.loc[0:3] 选取出0 1 2 3 共四行;pd.iloc[0:3] 选取出0 1 2 共三行; np[0:3] 选取出0 1 2 共三行。

In [31]: data
Out[31]:
    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15    

In [32]: data[2:3]       #选取第2行
Out[32]:
   0  1   2   3
2  8  9  10  11

In [33]: data.iloc[2:3]  #选取第2行
Out[33]:
   0  1   2   3
2  8  9  10  11

In [34]: data.iloc[:,2:3]#选取第2列
Out[34]:
    2
0   2
1   6
2  10
3  14

In [35]: data.loc[2:3]   #选取第2 3行 (前提得是行标签是数字)
Out[35]:
    0   1   2   3
2   8   9  10  11
3  12  13  14  15

In [36]: data.loc[:,2:3] #选取第2 3列 (前提得是列标签是数字)
Out[36]:
    2   3
0   2   3
1   6   7
2  10  11
3  14  15

(2)对于numpy数据,切片范围超过数据原有size会报错;但对于pandas数据,切片范围超过数据原有size则直接切到多少返回多少,没有就返回Empty DataFrame。

In [37]: data.iloc[:,3:5]
Out[37]:
    3
0   3
1   7
2  11
3  15

In [47]: data.iloc[:,5:10]
Out[47]:
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3]

In [38]: data.iloc[5:10]
Out[38]:
Empty DataFrame
Columns: [0, 1, 2, 3]
Index: []

DataFrame的条件过滤

In [48]: data
Out[48]:
    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15

# 与语句
In [49]: data[data[0]>2]                  # 过滤出第0列数据大于2的所有行
Out[49]:
    0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15

In [50]: data[(data[0]>2) & (data[2]<10)] # 过滤出第0列数据大于2且第2列数据小于10的所 有行
Out[50]:
   0  1  2  3
1  4  5  6  7

# 或语句
In [51]: data[data[1]>10]                 # 过滤出第1列数据大于10的所有行
Out[51]:
    0   1   2   3
3  12  13  14  15

In [52]: data[(data[1]>10) | (data[3]<5)] # 过滤出第1列数据大于10或第3列数据小于5的所有行
Out[52]:
    0   1   2   3
0   0   1   2   3
3  12  13  14  15

# 注意1:[]中的'与'要用'&','或'要用'|'
# 注意2:条件语句要用()括起来,否则会产生bug
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pandas 中,DataFrame 中的每一都有一个索引(column index),而每一都有一个索引(row index),这些索引用于标识 DataFrame 中的数据。 索引是一个包含标签(column label)的 Index 对象,可以使用 `df.columns` 属性来访问它,其中 df 是 DataFrame 对象。索引是一个包含标签(row label)的 Index 对象,可以使用 `df.index` 属性来访问它。 索引索引都遵循以下规则: 1. 索引可以是任何 hashable 的对象,通常使用字符串或整数作为索引。如果没有显式指定索引,则使用默认的整数索引,从 0 开始递增。 2. 索引对象是不可变的,不能直接修改索引的值。如果需要修改索引,需要先创建一个新的索引对象。 3. 索引对象可以包含重复的标签,但是在某些操作中可能会出现问题。为了避免这种情况,可以使用 `duplicated()` 和 `drop_duplicates()` 方法来检测和删除重复的标签。 4. 索引对象可以使用切片(slice)来进筛选或切片操作,也可以使用布尔索引过滤。 5. 所有的 Pandas 函数和方法都支持使用索引索引数据选择和操作。 6. 索引对象可以使用 `set_index()` 方法来更改 DataFrame索引,也可以使用 `reset_index()` 方法来重置索引索引只能通过修改 `df.columns` 属性来更改。 总之,索引Pandas 中非常重要的概念,可以帮助我们对数据进快速的查询、切片和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值