Skip to the content.

05-数据筛选


创建数据案例

import pandas as pd
import numpy as np
df = pd.DataFrame({'id':[1001,1002,1003,1004,1005,1006], 
                   'date':pd.date_range('20130102', periods=6),
                   'city':['Beijing','SH','Guangzhou ','Shenzhen','Shanghai', 'Beijing'],
                   'age':[23,44,54,32,34,32],
                   'category':['100-A','100-B','110-A','110-C','210-A','130-F'],
                   'price':[1200,np.nan,2133,5433,np.nan,4432]},
                   columns =['id','date','city','category','age','price'])



简单选取

# 简选选取行与列
df[1:] #选取第二行至末尾
df[1:3] #选取第二、第三行
df[['id','age']] #选取id和age列


# 根据标签选取数据-loc
df.loc[3] #选取第四行
df.loc[:3] #选取开头至第四行(含)
df.loc[:, 'city':] #选取city(含)之后的所有列


# 根据位置选取数据-iloc
df.iloc[:3,:3]
df.iloc[[0,2,5],[4,5]]


# 根据标签和位置混合提取数据-ix
df = df.set_index('date')
df.ix[:'2013-01-04',:4]



根据是非条件选取

# 常用判断条件
# 判断city列的值是否为beijing
df['city'].isin(['beijing'])

# 判断city中是否包含某个字符
df['city'].str.contains('sh')

# 先判断city列里是否包含Beijing和Shanghai,然后将复合条件的数据提取出来
df.loc[df['city'].isin(['Beijing','Shanghai'])] #包含
df[-df['city'].isin(['Beijing','Shanghai'])] #不包含


# 选取列值为字符串的所有列
df.loc[:, df.dtypes == 'O']
df.select_dtypes(include='object')
df.select_dtypes(exclude=['number','datetime'])

# 删除某一列为缺失的所有行
df.loc[~df['price'].isna()]



根据复合条件筛选

# 使用“与”进行筛选
df.loc[(df['age'] > 25) & (df['city'] == 'Beijing'), ['id','city','age']]

# 使用“或”条件筛选
df.loc[(df['age'] > 25) | (df['city'] == 'Beijing'), ['id','city','age']].sort_values(['age'])

# 使用“非”条件进行筛选
df.loc[(df['city'] != 'Beijing'), ['id','city','age', 'category','gender']].sort_values(['id'])

# 多条件筛选(可读性较好)
cr1 = df['age'] > 25
cr2 = df['city'] == 'Beijing'
df[cr1 & cr2]

# 使用query函数进行筛选
df.query('city == ["Beijing", "Shanghai"]')

# 对筛选后的数据按age字段进行排序
df.loc[(df['age'] > 25) | (df['city'] == 'Beijing'), ['id','city','age']].sort_values(['age'])

# 对筛选后的数据按price进行求和
df.query('city == ["Beijing", "Shanghai"]').price.sum()


< <目录 06-数据汇总> 返回顶部 ↑