pandas数据筛选与排序sort_index,sort_values

数据筛选

第一步数据标记

标记数据非常简单, 直接获取数据然后进行判断即可

bools = df['value'] > 100

# 在这段代码中, 获取数据中 'value' 这一列
# 然后大于100 是筛选条件, 那么他就会返回一个布尔值
# 如果为 True 就表示这一行数据符合筛选的条件
# 如果为False 就表示不符合, 不符合在筛选时就会被去除
# 把标记结果复制给一个变量 bools, 然后用这个标记直接筛选符合条件的数据

第二步 筛选数据

使用标记筛选数据

df_new = df[bools]

这是 只有一个筛选条件的情况下, 如果有多个条件就可以使用逻辑运算符


在我们的需求中,需要的数据是同时满足两个条件,所以我们使用逻辑与运算连接两个值,最后获取同时满足两个条件的值
先设定多个筛选条件

bools01 = df['value1'] > 300
bools02 = df['value2'] > 100
在获取数据的时候, 因为有多个条件, 所以需要使用逻辑运算符进行运算
如果 想要筛选出两个条件都成立的情况 就可使用`&`
df_new2 = df[bools01 & bools02] 
# 其中 &表示bool1和bool2的条件都要成立

补充筛选方法

  • series.str 会将每一个数据转换成字符串
  • contains() 判断字符串是否含有指定子串,返回的是bool类型
import pandas as pd

dict={
    'R': ['A78', 'A94', 'A6L', 'A88'],
    'B': ['B40', 'B51', 'B82', 'B32'],
    'C': ['C90', 'C41', 'C26', 'C23']}
df=pd.DataFrame(dict1)
df.head()

# series.str会将每一个数据转换成字符串
# contains()判断字符串是否含有指定子串,返回的是bool类型
# 下面这个 就是在 R 列里面值包含 L 的筛选出来
bools = df['R'].str.contains("L")
new_df = df[bools]
  • 在这里插入图片描述

数据排序

sort_index()、sort_values(),在排序的时候我们要特别注意,这个方法是直接对我们的数据进行了排序,并不会生成一个新的数据,所以排序操作我们不需要将它赋值给新的变量

sort_index()

sort_index() 方法是按照行索引进行排序, 所以读取出来的数据就一定要有行索引,
可以在读取数据的时候指定一个行索引

# 在读取文件时使用, index_col='value', 指定一个行索引
df = pd.read_excel('../data/rate.xlsx',index_col='Country Code')
示例
import pandas as pd

dict1={
    'R': ['A78', 'A94', 'A6L', 'A88'],
    'B': ['B40', 'B51', 'B82', 'B32'],
    'C': ['C90', 'C41', 'C26', 'C23']}
df1=pd.DataFrame(dict1, index=['V8', 'V1', 'V9', 'V6'])
df1.head()
  • 在这里插入图片描述
# 使用 sort_index()
df1.sort_index(ascending=False, inplace=True)
df1.head()
  • 在这里插入图片描述

  • inplace=True参数是针对在对读取的文件的时候, 用来控制是否直接对原始数据进行修改

  • ascending可以控制排序的顺序, 默认值为True从小到大排序, 当它被设置为False的时候就可以使用倒序排序

sort_values()

sort_values() 可以指定具体列进行排序, 它比sort_index()方法多了一个参数 by

  • by : 决定了是按数据中哪一列进行排序, 将需要按照某列排序的列名赋值个by即可
  • inplace=True 用来控制是否直接对原始数据进行修改
  • ascending可以控制排序的顺序, 默认值为True从小到大排序, 当它被设置为False的时候就可以使用倒序排序
  • 好像重复了, 算了就当凑字符啦
df.sort_values(by='value', ascending=False, inplace=True)

也可根据多列进行排序, 只需在by后面换成一个列表, 列表中的元素就是排序指定的列

df.sort_values(by=['value1','value2'], ascending=False, inplace=True)

这两种排序, 我感觉不都是按照列就行排序的吗, 一个是指定的列, 一个按照索引(索引不也是一列?), 使用起来还是 仁者见仁智者见智把

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值