old_list =[11,22,33,44,55,66]
new_l1 =[i+1for i in old_list]
new_l1 =[i+1for i in old_list if i >38]
今日内容概要
作业讲解
数据操作
各种数据类型的处理
数据的汇总
数据的合并
pandas模块总结(结束)
今日内容详细
作业讲解
1.利用read_excel完成
df5 = pd.read_excel(r'data_test06.xlsx',
skiprows=5,
usecols=['ID','Name','isRun','Date'])
df5
# 需求分析
df5.describe() 快速统计
# 针对ID自动递增填充
df5['ID']len(df5['ID'])# 方式1
id_list =[]for i inrange(len(df5['ID'])):
id_list.append(i+1)
df5['ID']= id_list
# 方式2"列表生成式"
df5['ID']=[i+1for i inrange(len(df5['ID']))]# 方式3for i in df5.index:
df5['ID'].at[i]= i +1# at[行索引]获取id字段对应数据# 针对isRun自动交替变换for i in df5.index:if i%2==0:
df5['isRun'].at[i]='Yes'else:
df5['isRun'].at[i]='No'# 利用二元表达式的优化for i in df5.index:
df5['isRun'].at[i]='Yes'if i%2==0else'No'
二元表达式
# 当if判断只用在二选一的情况下 我们可以使用更加简单的书写方式# 二元表达式
res =11if1>0else222'if条件成立则使用if前面的值 不成立则使用else后面的值'
日期的递增操作
from datetime import date,timedelta
date 获取日期(年月日)
timedelta 时间差值
d = date(2020,11,11)# 自定义时间# 三天之后
d + timedelta(days=3)
ctime = date.today()# 获取今天日期
ctime
# 日递增
current_time = date.today()for i in df5.index:
df5['Date'].at[i]= current_time + timedelta(days=i)# 月递增defadd_month(d,md):# 该函数可以反复使用'''自动帮你校验当前月份并自动重置'''
yd = md//12
m = d.month + md%12if m!=12:
yd += m //12
m = m %12return date(d.year+yd,m,d.day)for i in df5.index:
df5['Date'].at[i]= add_month(current_time,i)# 年递增for i in df5.index:
df5['Date'].at[i]= date(current_time.year+i,current_time.month,current_time.day)'''由于NaN为浮点型,可以在读取数据时,先将NaN转换成str
dtype={'ID':str,'isRun':str,'Date':str}
'''
数据筛选
# 获取指定列的数据# 1.获取汽车品牌和新车价格 select Brand,New_price from sec_car;# 单列
df4['Brand']
df4['列名']# 多列 需要嵌套
df4[['Brand','New_price']]
df4[['列名1','列名2']]# 获取指定数据# 2.获取Discharge为国四的汽车数据 select * from sec_car where Discharge = '国4';
df4[df4['Discharge']=='国4']# 获取满足多个条件的数据# 3.获取品牌是DS并且Discharge为国5的汽车数据
select *from sec_car where Brand ='DS'and Discharge ='国5';
df4[(df4['Brand']=='DS')&(df4['Discharge']=='国5')]# 获取满足某个条件的数据# 4.获取品牌是众泰或者二手车价格在15万以上的车
select *from sec_car where Brand ='众泰'or Sec_price >15;
df4[(df4['Brand']=='众泰')|(df4['Sec_price']>15)]# 获取满足部分条件的部分数据# 5.获取品牌是众泰或者二手车价格在15万以上的车的Name和New_price
select Name,New_price from sec_car where Brand ='众泰'or Sec_price >15;
df4.loc[(df4['Brand']=='众泰')|(df4['Sec_price']>15),['Name','New_price']]'''如果针对筛选出来的数据 还需要指定字段名称 则需要使用loc方法'''
数据处理
# 1.将Boarding_time由原来的字符串类型转换成日期类型
pd.to_datetime(df4['Boarding_time'],format='%Y年%m月')"""
日期习惯的符号
Y 年
m 月
d 日
H 时
M 分
S 秒
"""
df4['Boarding_time']=
pd.to_datetime(df4['Boarding_time'],format='%Y年%m月')# 2.将New_price由原来的字符串转换成数字类型
df4['New_price'].str[0:-1]# 获取除最后一个字符,切割字符串数据 需要加str方法
df4['New_price'].str[0:-1].astype(float)# astype用于数据类型的转换# dtypes和info()查看数据类型# 3.去重 select distinct id from user;
df5.duplicated()# 判断是否含有重复数据
df5[df5.duplicated()]# 获取重复数据
df5.drop_duplicates()# 直接删除重复的数据
import numpy as np
# MySQL group by abs按照指定的条件将单个单个的数据分门别类# 聚合函数 max min avg sum count 分组之后才可以使用聚合函数
df1.groupby(by='color').size()# 通过groupby方法,指定分组分量
grouped = df1.groupby(by =['color','cut'])# 对分组变量进行统计汇总
res = df1.groupby(by='color').aggregate({'color':np.size,'carat':np.min,'price':np.mean,'table':np.max})# 调整变量名的顺序
result = pd.DataFrame(result, columns=['color','carat','price','table'])# 数据集重命名
result.rename(columns={'color':'count','carat':'min_weight','price':'avg_price','table':'max_table'},
inplace=True)