首页 > 其他 > 详细

pandas巩固

时间:2020-06-03 09:49:16      阅读:46      评论:0      收藏:0      [点我收藏+]
导包
import pandas as pd
设置输出结果列对齐
pd.set_option(display.unicode.ambiguous_as_wide,True)
pd.set_option(display.unicode.east_asian_width,True)
创建 从 0 开始的非负整数索引
s1 = pd.Series(range(1,20,5))
使用字典创建 Series 字典的键作为索引
s2 = pd.Series({语文:95,数学:98,Python:100,物理:97,化学:99})
修改 Series 对象的值
s1[3] = -17
查看 s1 的绝对值
abs(s1)
将 s1 所有的值都加 5、使用加法时,对所有元素都进行
s1 + 5
在 s1 的索引下标前加入参数值
s1.add_prefix(2)
s2 数据的直方图
s2.hist()
每行索引后面加上 hany
s2.add_suffix(hany)
查看 s2 中最大值的索引
s2.argmax()
查看 s2 的值是否在指定区间内
s2.between(90,100,inclusive = True)
查看 s2 中 97 分以上的数据
s2[s2 > 97]
查看 s2 中大于中值的数据
s2[s2 > s2.median()]
s2 与数字之间的运算,开平方根 * 10 保留一位小数
round((s2**0.5)*10,1)
s2 的中值
s2.median()
s2 中最小的两个数
s2.nsmallest(2)
s2 中最大的两个数
s2.nlargest(2)
Series 对象之间的运算,对相同索引进行计算,不是相同索引的使用 NaN
pd.Series(range(5)) + pd.Series(range(5,10))
对 Series 对象使用匿名函数
pd.Series(range(5)).pipe(lambda x,y,z :(x**y)%z,2,5)
pd.Series(range(5)).pipe(lambda x:x+3)
pd.Series(range(5)).pipe(lambda x:x+3).pipe(lambda x:x*3)
对 Series 对象使用匿名函数
pd.Series(range(5)).apply(lambda x:x+3)
查看标准差
pd.Series(range(0,5)).std()
查看无偏方差
pd.Series(range(0,5)).var()
查看无偏标准差
pd.Series(range(0,5)).sem()
查看是否存在等价于 True 的值
any(pd.Series([3,0,True]))
查看是否所有的值都等价于 True
all(pd.Series([3,0,True]))

创建一个 DataFrame 对象
dataframe = pd.DataFrame(np.random.randint(1,20,(5,3)),
                         index = range(5),
                         columns = [A,B,C])
索引为时间序列
dataframe2 = pd.DataFrame(np.random.randint(5,15,(9,3)),
                          index = pd.date_range(start = 202003211126,
                                                end = 202003212000,
                                                freq = H),
                          columns = [Pandas,爬虫,比赛])
使用字典进行创建
dataframe3 = pd.DataFrame({语文:[87,79,67,92],
                           数学:[93,89,80,77],
                           英语:[88,95,76,77]},
                          index = [张三,李四,王五,赵六])
创建时自动扩充
dataframe4 = pd.DataFrame({A:range(5,10),B:3})
查看周几
dff[日期] = pd.to_datetime(data[日期]).dt.weekday_name
按照周几进行分组,查看交易的平均值
dff = dff.groupby(日期).mean().apply(round)
dff.index.name = 周几
对姓名和日期进行分组,并进行求和
dff = dataframe.groupby(by = [姓名,日期],as_index = False).sum()
将 dff 的索引,列 设置成透视表形式
dff = dff.pivot(index = 姓名,columns = 日期,values = 交易额)
查看前一天的数据
dff.iloc[:,:1]
交易总额小于 4000 的人的前三天业绩
dff[dff.sum(axis = 1) < 4000].iloc[:,:3]
工资总额大于 2900 元的员工的姓名
dff[dff.sum(axis = 1) > 2900].index.values
显示前两天每一天的交易总额以及每个人的交易金额
dataframe.pivot_table(values = 交易额,index = 姓名,
                      columns = 日期,aggfunc = sum,margins = True).iloc[:,:2]
显示每个人在每个柜台的交易总额
dff = dataframe.groupby(by = [姓名,柜台],as_index = False).sum()
dff.pivot(index = 姓名,columns = 柜台,values = 交易额)
查看每人每天的上班次数
dataframe.pivot_table(values = 交易额,index = 姓名,columns = 日期,aggfunc = count,margins = True).iloc[:,:1]
查看每个人每天购买的次数
dataframe.pivot_table(values = 交易额,index = 姓名,columns = 日期,aggfunc = count,margins = True)
每个人每天上过几次班
pd.crosstab(dataframe.姓名,dataframe.日期,margins = True).iloc[:,:2]
每个人每天去过几次柜台
pd.crosstab(dataframe.姓名,dataframe.柜台)
将每一个人在每一个柜台的交易总额显示出来
pd.crosstab(dataframe.姓名,dataframe.柜台,dataframe.交易额,aggfunc=sum)
每个人在每个柜台交易额的平均值,金额/天数
pd.crosstab(dataframe.姓名,dataframe.柜台,dataframe.交易额,aggfunc = mean).apply(lambda  num:round(num,2) )
对 5 的余数进行分组
dataframe.groupby(by = lambda num:num % 5)[交易额].sum()
查看索引为 7 15 的交易额
dataframe.groupby(by = {7:索引为7的行,15:索引为15的行})[交易额].sum()
查看不同时段的交易总额
dataframe.groupby(by = 时段)[交易额].sum()
各柜台的销售总额
dataframe.groupby(by = 柜台)[交易额].sum()
查看每个人在每个时段购买的次数
count = dataframe.groupby(by = 姓名)[时段].count()
每个人的交易额平均值并排序
dataframe.groupby(by = 姓名)[交易额].mean().round(2).sort_values()
每个人的交易额,apply(int) 转换为整数
dataframe.groupby(by = 姓名).sum()[交易额].apply(int)
每一个员工交易额的中值
data = dataframe.groupby(by = 姓名).median()
查看交易额对应的排名
data[排名] = data[交易额].rank(ascending = False)
data[[交易额,排名]]
每个人不同时段的交易额
dataframe.groupby(by = [姓名,时段])[交易额].sum()
设置各时段累计
dataframe.groupby(by = [姓名])[时段,交易额].aggregate({交易额:np.sum,时段:lambda x:各时段累计})
对指定列进行聚合,查看最大,最小,和,平均值,中值
dataframe.groupby(by = 姓名).agg([max,min,sum,mean,median])
查看部分聚合后的结果
dataframe.groupby(by = 姓名).agg([max,min,sum,mean,median])[交易额]
查看交易额低于 2000 的三条数据
dataframe[dataframe.交易额 < 2000][:3]
查看上浮了 50% 之后依旧低于 1500 的交易额,查看 4 条数据
dataframe.loc[dataframe.交易额 < 1500,交易额] = dataframe[dataframe.交易额 < 1500][交易额].map(lambda num:num*1.5)
查看交易额大于 2500 的数据
dataframe[dataframe.交易额 > 2500]
查看交易额低于 900 或 高于 1800 的数据
dataframe[(dataframe.交易额 < 900)|(dataframe.交易额 > 1800)]
将所有低于 200 的交易额都替换成 200
dataframe.loc[dataframe.交易额 < 200,交易额] = 200
查看低于 1500 的交易额个数
dataframe.loc[dataframe.交易额 < 1500,交易额].count()
将大于 3000 元的都替换为 3000 元
dataframe.loc[dataframe.交易额 > 3000,交易额] = 3000
查看有多少行数据
len(dataframe)
丢弃缺失值之后的行数
len(dataframe.dropna())
包含缺失值的行
dataframe[dataframe[交易额].isnull()]
使用固定值替换缺失值
dff = copy.deepcopy(dataframe)
dff.loc[dff.交易额.isnull(),交易额] = 999
使用交易额的均值替换缺失值
dff = copy.deepcopy(dataframe)
for i in dff[dff.交易额.isnull()].index:
    dff.loc[i,交易额] = round(dff.loc[dff.姓名 == dff.loc[i,姓名],交易额].mean())
使用整体均值的 80% 填充缺失值
dataframe.fillna({交易额:round(dataframe[交易额].mean() * 0.8)},inplace = True)
查看重复值
dataframe[dataframe.duplicated()]
丢弃重复行
dataframe = dataframe.drop_duplicates()
查看员工业绩波动情况(每一天和昨天的数据作比较)
dff = dataframe.groupby(by = 日期).sum()[交易额].diff()
对数据使用 map 函数
dff.map(lambda num:%.2f%(num))[:5]
查看张三的波动情况
dataframe[dataframe.姓名 == 张三].groupby(by = 日期).sum()[交易额].diff()
修改异常值
data.loc[data.交易额 > 3000,交易额] = 3000
data.loc[data.交易额 < 200,交易额] = 200
删除重复值
data.drop_duplicates(inplace = True)
填充缺失值
data[交易额].fillna(data[交易额].mean(),inplace = True)
使用交叉表得到每人在各柜台交易额的平均值
data_group = pd.crosstab(data.姓名,data.柜台,data.交易额,aggfunc = mean).apply(round)
绘制柱状图
data_group.plot(kind = bar)
使用 concat 连接两个相同结构的 DataFrame 对象
df3 = pd.concat([df1,df2])
合并,忽略原来的索引 ignore_index
df4 = df3.append([df1,df2],ignore_index = True)
按照列进行拆分
df5 = df4.loc[:,[姓名,柜台,交易额]]
按照工号进行合并,随机查看 3 条数据
rows = np.random.randint(0,len(df5),3)
pd.merge(df4,df5).iloc[rows,:]
按照工号进行合并,指定其他同名列的后缀
pd.merge(df1,df2,on = 工号,suffixes = [_x,_y]).iloc[:,:]
两个表都设置工号为索引 set_index
df2.set_index(工号).join(df3.set_index(工号),lsuffix = _x,rsuffix = _y).iloc[:]
按照交易额和工号降序排序,查看五条数据
dataframe.sort_values(by = [交易额,工号],ascending = False)[:5]
按照交易额和工号升序排序,查看五条数据
dataframe.sort_values(by = [交易额,工号])[:5]
按照交易额降序和工号升序排序,查看五条数据
dataframe.sort_values(by = [交易额,工号],ascending = [False,True])[:5]
按工号升序排序
dataframe.sort_values(by = [工号])[:5]
按列名升序排序
dataframe.sort_index(axis = 1)[:5]
每隔五天--5D
pd.date_range(start = 20200101,end = 20200131,freq = 5D)
每隔一周--W
pd.date_range(start = 20200301,end = 20200331,freq = W)
间隔两天,五个数据
pd.date_range(start = 20200301,periods = 5,freq = 2D)
间隔三小时,八个数据
pd.date_range(start = 20200301,periods = 8,freq = 3H)
三点开始,十二个数据,间隔一分钟
pd.date_range(start = 202003010300,periods = 12,freq = T)
每个月的最后一天
pd.date_range(start = 20190101,end = 20191231,freq = M)
间隔一年,六个数据,年末最后一天
pd.date_range(start = 20190101,periods = 6,freq = A)
间隔一年,六个数据,年初最后一天
pd.date_range(start = 20200101,periods = 6,freq = AS)
使用 Series 对象包含时间序列对象,使用特定索引
data = pd.Series(index = pd.date_range(start = 20200321,periods = 24,freq = H),data = range(24))
三分钟重采样,计算均值
data.resample(3H).mean()
五分钟重采样,求和
data.resample(5H).sum()
计算OHLC open,high,low,close
data.resample(5H).ohlc()
将日期替换为第二天
data.index = data.index + pd.Timedelta(1D)
查看指定日期的年份是否是闰年
pd.Timestamp(20200301).is_leap_year
查看指定日期所在的季度和月份
day = pd.Timestamp(20200321)
查看日期的季度
day.quarter
查看日期所在的月份
day.month
转换为 python 的日期时间对象
day.to_pydatetime()

查看所有的交易额信息
dataframe[交易额].describe()
查看四分位数
dataframe[交易额].quantile([0,0.25,0.5,0.75,1.0])
查看最大的交易额数据
dataframe.nlargest(2,交易额)
查看最后一个日期
dataframe[日期].max()
查看最小的工号
dataframe[工号].min()
第一个最小交易额的行下标
index = dataframe[交易额].idxmin()
第一个最小交易额
dataframe.loc[index,交易额]
最大交易额的行下标
index = dataframe[交易额].idxmax()
跳过 1 2 4 行,以第一列姓名为索引
dataframe2 = pd.read_excel(超市营业额.xlsx,
                           skiprows = [1,2,4],
                           index_col = 1)
查看 5 到 10 的数据
dataframe[5:11]
查看第六行的数据
dataframe.iloc[5]
查看第 1 3 4 行的数据
dataframe.iloc[[0,2,3],:]
查看第 1 3 4 行的第 1 2 列
dataframe.iloc[[0,2,3],[0,1]]
查看前五行指定,姓名、时段和交易额的数据
dataframe[[姓名,时段,交易额]][:5]
查看第 2 4 5 行 姓名,交易额 数据 loc 函数
dataframe.loc[[1,3,4],[姓名,交易额]]
查看第四行的姓名数据
dataframe.at[3,姓名]
某一时段的交易总和
dataframe[dataframe[时段] == 14:00-21:00][交易额].sum()
查看张三总共的交易额
dataframe[dataframe[姓名].isin([张三])][交易额].sum()
查看日用品的销售总额
dataframe[dataframe[柜台] == 日用品][交易额].sum()
查看交易额在 1500~3000 之间的记录
dataframe[dataframe[交易额].between(1500,3000)]
将日期设置为 python 中的日期类型
data.日期 = pd.to_datetime(data.日期)
每七天营业的总额
data.resample(7D,on = 日期).sum()[交易额]
每七天营业总额
data.resample(7D,on = 日期,label = right).sum()[交易额]
每七天营业额的平均值
func = lambda item:round(np.sum(item)/len(item),2)
data.resample(7D,on = 日期,label = right).apply(func)[交易额]
每七天营业额的平均值
func = lambda num:round(num,2)
data.resample(7D,on = 日期,label = right).mean().apply(func)[交易额]
删除工号这一列
data.drop(工号,axis = 1,inplace = True)
按照姓名和柜台进行分组汇总
data = data.groupby(by = [姓名,柜台]).sum()
查看张三的汇总数据
data.loc[张三,:]
查看张三在蔬菜水果的交易数据
data.loc[张三,蔬菜水果]
丢弃工号列
data.drop(工号,axis = 1,inplace = True)
按照柜台进行排序
dff = data.sort_index(level = 柜台,axis = 0)
按照姓名进行排序
dff = data.sort_index(level = 姓名,axis = 0)
按照柜台进行分组求和
dff = data.groupby(level = 柜台).sum()[交易额]
平均值
data.mean()
标准差
data.std()
协方差
data.cov()
删除缺失值和重复值,inplace = True 直接丢弃
data.dropna(inplace = True)
data.drop_duplicates(inplace = True)

2020-06-03

pandas巩固

原文:https://www.cnblogs.com/hany-postq473111315/p/13034160.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!