数据筛选
第一步数据标记
标记数据非常简单, 直接获取数据然后进行判断即可
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)
这两种排序, 我感觉不都是按照列就行排序的吗, 一个是指定的列, 一个按照索引(索引不也是一列?), 使用起来还是 仁者见仁智者见智把