课程适用人群:

  1. python零基础数据分析的朋友;
  2. 在校学生;
  3. 职场中经常要处理各种数据表格,或大量数据(十万级以上)的朋友;
  4. 喜欢图表可视化的朋友;

系列视频目前可在B站观看,会定期更新,欢迎大家吐槽!

视频地址:数据筛选与排序

本节代码:

# 导入pandas工具包
import pandas as pd
# 读取数据
data1 = pd.read_csv('D:/python/课件/data/dzdp_data.csv')

# 删除有缺失值的数据,缺失值可能会导致筛选报错
data1 = data1.dropna().reset_index(drop=True)

# 修改列名:列名都改为中文
data1.columns = ['客户id', '评价时间', '星级', '内容', '口味',
                 '环境', '服务', '商店id', '评分', '年', '月', 
                 '周','小时', '内容长度']


# =============================================================================
# 数据筛选
# =============================================================================

# =============================================================================
# 筛选列,两个中括号
# =============================================================================
data2 = data1[['客户id','评价时间','口味','环境', '服务', '商店id', '评分']]


# =============================================================================
# #筛选行:单变量
# =============================================================================
# 文本
data3 = data1[data1['服务']=='很好'] # 两个等号
data3_re = data1[~(data1['服务']=='很好')] # 反选
data3_re_re = data1[data1['服务']!='很好'] # 反选
# 数值
data3_re_re = data1[data1['内容长度']<10] 


# =============================================================================
# 筛选行:多变量
# =============================================================================
data4 = data1[(data1['服务']=='很好')&(data1['年']==2016)]  # 字符串用引号,数值不用引号  &:and 并且; | : or 或者
#(data1['服务']=='很好')&(data1['年']==2016)

# =============================================================================
# 筛选行:单变量多种条件
# =============================================================================
data5 = data1[data1['服务'].isin(['好', '很好', '非常好'])]
data6 = data1[data1['年'].isin([2015,2018])]

# =============================================================================
#loc、iloc筛选:可以筛选行 和筛选列
# =============================================================================
data7 = data1.loc[data1['服务']=='很好',['客户id','评价时间']]
data7_re = data1.loc[data1['年']>2014]
data7_re_re = data1.loc[data1['年']>2014,:]
data7_re_re_re = data1.iloc[:5,3:10]  # 一般会用在for循环中

# =============================================================================
# str筛选:模糊匹配赛选
# =============================================================================
data8 = data1[data1['内容'].str.contains('北京')]  # 筛选内容字段中含“北京”两个子的数据
data9 = data1[data1['内容'].str.contains('北京|上海')]  # 筛选内容字is段中含“北京”或者“上海”两个子的数据
data10 = data1[data1['客户id'].str.len()>20]  # 筛选客户id长度大于20的
data11 = data1[data1['内容'].str.startswith('广州')]  # 筛选内容以“广州”开头的
data12 = data1[data1['客户id'].str[0]=='A']  # 筛选客户id以A开头的
data13 = data1[data1['客户id'].str.isdigit()]  # 筛选客户id只包含数值的

# =============================================================================
# 日期筛选
# =============================================================================
data1.info()
data1['评价时间'] = pd.to_datetime(data1['评价时间'])

# 当日期为变量列时
data14 = data1[data1['评价时间'].apply(lambda x: x.year == 2018)]
data15 = data1[data1['评价时间'].apply(lambda x: x.strftime('%Y%m')=='201808')]
data16 = data1[data1['评价时间']>'2018-9-1']


# 当日期为索引时
data1_copy = data1.copy()
data1_copy.set_index('评价时间',inplace=True)

# 筛选
data17 = data1_copy.loc['2015']
data17_re = data1_copy.loc['2015-08']  # '2015-08':'2015-10'
data17_re_re = data1_copy.loc['2015-08-01']


# =============================================================================
# 高阶函数和分组后筛选:会在后期视频介绍
# =============================================================================


# =============================================================================
# 排序
# =============================================================================
# 单字段排序
data1.sort_values('评价时间',inplace=True)  # 默认升序排列
data1.sort_values('评价时间',ascending=False,inplace=True)  # 改成降序

# 多字段排序
data1.sort_values(['评价时间','评分'],ascending=[False,False],inplace=True)