首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
13,969 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
11,334 阅读
3
gradle-5.4.1-all.zip下载
9,319 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
8,122 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
6,983 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
615
篇文章
累计收到
629
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
615
篇与
的结果
2021-12-30
此内容被密码保护
加密文章,请前往内页查看详情
2021年12月30日
156 阅读
0 评论
4 点赞
2021-12-22
Pandas三百题
2 - pandas 个性化显示设置1.显示全部列pd.set_option('display.max_columns',None)2.显示指定行/列指定让 data 在预览时显示10列,7行pd.set_option('display.max_cols',10)pd.set_option('display.max_rows',7)3.还原行/列显示数还原上面的显示设置pd.reset_option("max_rows")pd.reset_option("max_columns")4 修改每列最大字符宽度即每列最多显示的字符长度,例如【每列最多显示10个字符,多余的会变成...】pd.set_option('display.max_colwidth',10)5 修改小数点精度修改默认显示精度为小数点后5位pd.set_option('precision',5)6 还原所有显示设置还原上面的全部显示设置pd.reset_option('^display')3-数据预览与预处理数据查看1 查看数据维度先看看数据有多少行、多少列df.shape2 随机查看5条数据df.sample(5)3 查看数据前后5行df.head()df.tail()4-查看数据基本信息看看数据类型,有误缺失值什么的df.info()5-查看数据统计信息|数值查看数值型列的统计信息,计数,均值df.describe().round(2).T6-查看数据统计信息|离散查看离散型列的统计信息,计数,频率df.describe(include=['O'])7-查看数据统计信息|整体df.describe(include='all')缺失值处理8-计算缺失值|总计先看看一共存在多少个缺失值df.isnull().sum().sum()9-计算缺失值|分列具体每列有多少缺失值df.isnull().sum()10-查看缺失值查看全部缺失值所在的行df[df.isnull().T.any()==True]11-高亮缺失值df[df.isnull().T.any()==True].style.highlight_null(null_color='skyblue')12-删除缺失值缺失值出现的行全部删掉df.dropna(how='any')13-缺失值补全|整体填充将全部缺失值替换为*df.fillna('*')14-缺失值补全|向上填充将评分列的缺失值,替换为上一个电影的评分df['评分'] = df['评分'].fillna(method='ffill')15-缺失值补全|整体均值填充将评价人数列的缺失值,用整列的均值进行填充df['评价人数'] = df['评价人数'].fillna(df['评价人数'].mean())16-缺失值补全|上下均值填充将评价人数列的缺失值,用整列的均值进行填充df['评价人数'] = df['评价人数'].fillna(df['评价人数'].interpolate())17-缺失值补全|匹配填充现在填充 “语言” 列的缺失值,要求根据 “国家/地区” 列的值进行填充例如 《海上钢琴师》国家/地区为 意大利,根据其他意大利国家对应的语言来看,应填充为 意大利语df['语言']=df.groupby('国家/地区').语言.bfill()重复值处理18-查找重复值df[df.duplicated()]19-查找重复值|指定查找 片名 列全部重复值df[df['片名'].duplicated()]20-删除重复值删除全部的重复值df.drop_duplicates()21-删除重复值|指定删除全部的重复值,但保留最后一次出现的值df.drop_duplicates(keep='last')4-数据统计描述性分析数据探索1-查看数据查看数据前十行df.head(10)2-修改索引数据已经安装降序排列,让学校当索引会更好df.set_index(['学校'])3-查看数据量查看数据的行*列,总共单元格的数量df.size4-数据排序按照总分升序排列,并展示前20个df.sort_values(['总分']).head(20)5-数据排序将数据按照高端人才得分降序排序,展示前10位df.sort_values(['高端人才得分'],ascending=False).head(10)6-分列排名查看各项得分最高的学校名称df.iloc[:,3:].idxmax()7-统计信息|均值df['总分'].mean()8-统计信息|中位数df['总分'].median()9-统计信息|众数df['总分'].mode()10-统计信息|部分计算总分,高端人才得分,办学层次得分的最大最小值、中位数、均值方法1:df.describe()[['总分','高端人才得分','办学层次得分']].T[['max','min','50%','mean']]方法2:df.agg({"总分":["min", "max", "median", "mean"],"高端人才得分":["min", "max", "median", "mean"],"办学层次得分":["min", "max", "median", "mean"]})11-统计信息|完整查看数值型数据的统计信息(均值,分位数),并保留两位小数df.describe().round(2).T12-统计信息|分组计算各省市总分均值df.groupby('省市').agg({'总分':'mean'})13-统计信息|相关系数相关系数矩阵,也就是每两列之间的相关性系数df.corr()14-相关系数|热力图### 方法一 ### df.corr().style.background_gradient(cmap='coolwarm').set_precision(2) ### 方法二 ### 借助 `matplotlib` 和 `seaborn` 其中中文设置可以参考我的这篇文章 https://mp.weixin.qq.com/s/WKOGvQP-6QUAP00ZXjhweg import seaborn as sns import matplotlib.pyplot as plt plt.figure(figsize = (9,6),dpi=100) sns.set(font='Songti SC') sns.heatmap(df.corr().round(2),annot=True,cmap='RdBu') plt.show()15-统计信息|频率计算各省市出现的次数df['省市'].values_count()16-统计信息|热力地图from pyecharts import options as opts from pyecharts.charts import Map list1 = list(pd.DataFrame(df.省市.value_counts()).index) list2 = list(pd.DataFrame(df.省市.value_counts()).省市) c = ( Map() .add('', [list(z) for z in zip(list1,list2)], "china",is_map_symbol_show=False) .set_global_opts( title_opts=opts.TitleOpts(title="排名前100高校各省市占比"), visualmap_opts=opts.VisualMapOpts(max_=20), ) ) c.render_notebook()17-统计信息|直方图import seaborn as snssns.set(font='Songti SC')sns.distplot(df['总分'])5-数据筛选与修改5-1数据修改1-数据修改|列名将原 df 列名 Unnamed: 2、Unnamed: 3、Unnamed: 4 修改为 金牌数、银牌数、铜牌数df.rename(columns={'Unnamed: 2':'金牌数','Unnamed': 3':'银牌数','Unnamed: 4':'铜牌数')2-数据修改|行索引将第一列(排名)设置为索引df.set_index(['排名'])3-数据修改|修改索引名修改索引名为 金牌排名df.rename_axis('金牌排名')4-数据修改|修改值将 ROC(第一列第五行)修改为 俄奥委会df.iloc[4,1] = '俄奥委会'df.loc[5,['国家奥委会']] = '俄奥委会'5-数据修改|替换值(单值)将金牌数字的数字0替换为无df['金牌数'].replace(0,'无')6-数据修改|替换值(多值)将无替换为缺失值将0替换为Nonedf.replace(['无,0],[np.nan,"None"])7-数据查看查看各列数据类型df.dtypes8-数据修改|修改类型将金牌数列类型修改为intdf['金牌数'].fillna('0').astype('int')9-数据增加|新增列(固定值)新增一列比赛地点值为东京df['比赛地点'] = '东京'10-数据增加|新增列(计算值)新增一列金银牌总数列,值为该国家金银牌总数df['金银牌总数'] = df['金牌数'] + df['银牌数'] + df['铜牌数']11-数据增加|新增列(比较值)新增一列 最多奖牌数量列,值为该国 金、银、铜 牌数量中最多的一个奖牌数量例如美国银牌最多,则为41,中国为38df['最多奖牌数量'] = df[["金牌数", "银牌数",'铜牌数']].replace('None',0).fillna(0).max(axis=1)12-数据增加|新增列(判断值)新增一列 金牌大于30如果一个国家的金牌数大于 30 则值为 是,反之为否df['金牌大于30'] = df['金牌数'].apply(lambda x : '是' if x >30 else '否')df['金牌大于30'] = np.where(df['金牌数']>30,'是','否')13-数据增加|增加多列新增两列,分别是金铜牌总数(金牌数+铜牌数)银铜牌总数(银牌数+铜牌数)df.assign(金铜牌数量=df.金牌数+df.铜牌数,银铜牌总数=df.银牌数+df.铜牌数)14-数据增加|新增列(引用变量)新增一列金牌占比为各国金牌数除以总金牌数(gold_sum)gold_sum = df['金牌数'].sum()df['金牌数'].apply(lambda x : str(round(x/gold_sum*100,2))+'%')df.eval(f'金牌占比 = 金牌数 / {gold_sum}')15-数据增加|新增行(末尾追加)在df末尾追加一行,内容为0,1,2,3...一直到df列的长度df1 = pd.DataFrame([[i for i in range(len(df.columns))]], columns=df.columns)df_new = df.append(df1)16-数据增加|新增行(指定位置)在第2行新增一行数据,即美国和中国之间。df1 = df.iloc[:1,:] df2 = df.iloc[1:,:] df3 = pd.DataFrame([[i for i in range(len(df.columns))]],columns=df.columns) df_new = pd.concat([df1,df3,df2],ignore_index=True)17-数据删除|删除行删除df第一行dr.drop(1)18-数据删除|删除行(条件)df.drop(df[df.金牌数<20].index)19-数据删除|删除列df.drop(columns=['比赛地点'])20-数据删除|删除列(按列号)删除df的7,8,9,10列df.drop(df.columns[[7,8,9,10]],axis=1)5-2数据筛选21-筛选列|通过行号提取第1,2,3,4列df.iloc[:,[1,2,3,4]]22-筛选列|通过列名提取 金牌数、银牌数、铜牌数 三列df[['金牌数','银牌数','铜牌数']]23-筛选列|条件(列号)df.iloc[:,[i%2==1 for i in df.shape[1]]]24-筛选列|条件(列名)df.iloc[:,df.columns.str.endswith('数')]25-筛选列|组合(行号+列名)df.loc[10:20,'总分':]26-筛选行|通过行号提取第10行df.loc[9:9]27-筛选行|通过行号(多行)提取第10行之后的全部行df.loc[9:]28-筛选行|固定间隔提取0-50行,间隔为3df.loc[0:50:3]30-筛选行|判断(大于)提取金牌数大于30的行df[df['金牌数']>30]31-筛选行|判断(等于)提取金牌数等于10的行df[df['金牌数']==10]32-筛选行|判断(不等于)提取金牌数不等于10的行df[df['金牌数']!=10]33-筛选行|条件(指定行号)提取全部奇数行df[[i%2==1 for i in range(len(df.index))]]34-筛选行|条件(指定值)提取中国、美国、英国、巴西、日本五行数据df[df['国家奥委会'].isin(['中国','美国','英国','日本','巴西'])]35-筛选行|多条件在上一题的条件下,新增一个条件:金牌数小于30df[(df['国家奥委会'].isin(['中国','美国','英国','日本','巴西']))&(df['金牌数']<30)36 -筛选行|条件(包含指定值)提取 国家奥委会 列中,所有包含国的行df[df['国家奥委会'].str.contains('国')]37-筛选某行某列提取第0行第2列df.iloc[0:1,[1]]38-筛选多行多列提取 第 0-2 行第 0-2 列df.iloc[0:2,0:2]39-筛选值|组合(行号+列号)提取第 4 行,第 4 列的值df.iloc[3,3]40 - 筛选值|组合(行号+列名)提取行索引为 4 ,列名为 金牌数 的值df.at[4,'金牌数']41 - 筛选值|条件提取 国家奥委会 为 中国 的金牌数df.loc[df['国家奥委会']=='中国']['金牌数']42 - 筛选值 | query使用query提取金牌数+银牌数 大于 15的国家df.query('金牌数+银牌数 > 15')43 - 筛选值|query(引用变量)使用 query 提取 金牌数 大于 金牌均值的国家gold_mean = df['金牌数'].mean()df.query(f'金牌数 > {gold_mean}')6-数据分组与聚合分组1 - 分组统计|均值计算各区(district)的薪资(salary)均值df.groupby(['district']).agg({'salary':'mean'})df[['district','salary']].groupby(by='district').mean()df.groupby("district")['salary'].mean()2 - 分组统计|取消索引重新按照上一题要求进行分组,但不使用 district 做为索引df.groupby("district", as_index=False)['salary'].mean()3 - 分组统计|排序计算并提取平均薪资最高的区df[['district','salary']].groupby(by='district').mean().sort_values(['salary'],ascending=False).head(1)df[['district','salary']].groupby(by='district').mean().sort_values('salary',ascending=False).head(1)4 - 分组统计|频率计算不同行政区(district),不同规模公司(companySize)出现的次数df.groupby(['district','companySize']).size()5 - 分组统计|修改索引名将上一题的索引名修改为district -> 行政区companySize -> 公司规模pd.DataFrame(df.groupby("district")['companySize'].value_counts()).rename_axis(["行政区", "公司规模"])6 - 分组统计|计数计算上一题,每个区出现的公司数量df.groupby('district')['companySize'].count()7 - 分组查看|全部将数据按照 district、salary 进行分组,并查看各分组内容df.groupby(['district','salary']).groups8 - 分组查看|指定将数据按照 district、salary 进行分组,并查看西湖区薪资为 30000 的工作df.groupby(['district','salary']).get_group(('西湖区',30000))9 - 分组规则|通过匿名函数1根据 createTime 列,计算每天不同 行政区 新增的岗位数量df.groupby([df.createTime.apply(lambda x:x.day)])['district'].value_counts().rename_axis(['发布日','行政区'])10 - 分组规则|通过匿名函数2计算各行政区的企业领域(industryField)包含电商的总数df.groupby('district',sort=False)["industryField"].apply(lambda x:x.str.contains('电商').sum())11 - 分组规则|通过内置函数通过 positionName 的长度进行分组,并计算不同长度岗位名称的薪资均值df.set_index('positionName').groupby(len)['salary'].mean()12 - 分组规则|通过字典将 score 和 matchScore 的和记为总分,与 salary 列同时进行分组,并查看结果df.groupby({'salary':'薪资','score':'总分','matchScore':'总分'},axis=1).sum()13 - 分组规则|通过多列计算不同 工作年限(workYear)和 学历(education)之间的薪资均值pd.DataFrame(df.groupby(['workYear','education'])['salary'].mean()).rename_axis(['工作年限','教育'])14 - 分组转换| transform在原数据框 df 新增一列,数值为该区的平均薪资水平df['平均薪资'] = df[['district','salary']].groupby(by='district').transform('mean')15 - 分组过滤|filter提取平均工资小于 30000 的行政区的全部数据df.groupby('district').filter(lambda x:x['salary'].mean()<30000)16 - 分组可视化对杭州市各区公司数量进行分组,并使用柱状图进行可视化import matplotlib.pyplot as plt data = df.groupby('district').count()['positionName'] data.plot(kind='bar',figsize=(20, 12), color='#5172F0', fontsize=12) plt.xlabel('杭州市各区',fontsize=14) plt.ylabel('公司数量',fontsize=14) plt.show()6-2聚合17 - 聚合统计分组计算不同行政区,薪水的最小值、最大值和平均值df.groupby('district')['salary'].describe()[['min','max','mean']]df.groupby('district')['salary'].agg([min, max, np.mean])19 - 聚合统计|组合对不同岗位(positionName)进行分组,并统计其薪水(salary)中位数和得分(score)均值df.groupby('positionName').agg({'salary': 'median', 'score': 'mean'})20 -聚合统计|多层对不同行政区进行分组,并统计薪水的均值、中位数、方差,以及得分的均值df.groupby('district').agg({'salary': [np.mean, np.median, np.std], 'score': np.mean})21 - 聚合统计|自定义函数在 18 题基础上,在聚合计算时新增一列计算最大值与平均值的差值def myfunc(x): return x.max()-x.mean() df.groupby('district').agg(最低工资=('salary', 'min'), 最高工资=( 'salary', 'max'), 平均工资=('salary', 'mean'), 最大值与均值差值=('salary', myfunc)).rename_axis(["行政区"])7-数据透视与合并数据透视表1 - 加载数据读取当前目录下 "某超市销售数据.csv" 并设置千分位符号为 ,pd.read_csv('某超市销售数据.csv',thousands=',')2 - 数据透视|默认制作各省「平均销售额」的数据透视表pd.pivot_table(df,values=['销售额'],index='省/自治区']3 - 数据透视|指定方法制作各省「销售总额」的数据透视表pd.pivot_table(df,values=['销售额'],index='省/自治区',aggfunc=sum)4 - 数据透视|多方法制作各省「销售总额」与「平均销售额」的数据透视表pd.pivot_table(df,values=['销售额'],index='省/自治区',aggfunc=['mean','sum']5 - 数据透视|多指标制作各省市「销售总额」与「利润总额」的数据透视表pd.pivot_table(df,values=['销售额','利润'],index='省/自治区',aggfunc=['sum'])6 - 数据透视|多索引制作「各省市」与「不同类别」产品「销售总额」的数据透视表pd.pivot_table(df,values=['销售额'],index=['省/自治区','类别'],aggfunc=['sum'])7 - 数据透视|多层制作各省市「不同类别」产品的「销售总额」透视表pd.pivot_table(df,values=['销售额'],index=['省/自治区'],columns='类别',aggfunc='sum')8 - 数据透视|综合制作「各省市」、「不同类别」产品「销售量与销售额」的「均值与总和」的数据透视表,并在最后追加一行『合计』pd.pivot_table(df,values = ['销售额','数量'],index = ['省/自治区','类别'],aggfunc = ['mean',sum],margins=True)9 - 数据透视|筛选在上一题的基础上,查询 「类别」 等于 「办公用品」 的详情10 -数据透视|逆透视逆透视就是将宽的表转换为长的表,例如将第 5 题的透视表进行逆透视,其中不需要转换的列为『数量』列pd.pivot_table(df,values = ['销售额','利润','数量'],index = '类别',aggfunc = sum).melt(id_vars=['数量'],var_name='分类',value_name='金额')数据合并df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}, index=[0, 1, 2, 3]) df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'], 'B': ['B4', 'B5', 'B6', 'B7'], 'C': ['C4', 'C5', 'C6', 'C7'], 'D': ['D4', 'D5', 'D6', 'D7']}, index=[4, 5, 6, 7]) df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'], 'B': ['B8', 'B9', 'B10', 'B11'], 'C': ['C8', 'C9', 'C10', 'C11'], 'D': ['D8', 'D9', 'D10', 'D11']}, index=[8, 9, 10, 11]) df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'], 'D': ['D2', 'D3', 'D6', 'D7'], 'F': ['F2', 'F3', 'F6', 'F7']}, index=[2, 3, 6, 7])11 - concat|默认拼接拼接 df1 和 df2pd.concat([df1,df2])12 - concat|拼接多个垂直拼接 df1、df2、df3,效果如下图所示pd.concat([df1,df2,df3])13 - concat|重置索引垂直拼接 df1 和 df4,并按顺序重新生成索引,pd.concat([df1, df4], ignore_index=True)14 - concat|横向拼接横向拼接 df1、df4,效果如下图所示pd.concat([df1,df4],axis=1)15 - concat|横向拼接(取交集)在上一题的基础上,只取结果的交集pd.concat([df1,df4],axis=1,join='inner')16 - concat|横向拼接(取指定)在 14 题基础上,只取包含 df1 索引的部分pd.concat([df1, df4], axis=1).reindex(df1.index)17 - concat|新增索引拼接 df1、df2、df3,同时新增一个索引(x、y、z)来区分不同的表数据来源pd.concat([df1,df2,df3],keys=['x','y','z'])merge - 数据连接18 - merge|按单键根据 key 连接 left 和 rightleft = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']})pd.merge(left,right,on='key')19 - merge|按多键根据 key1 和 key2 连接 left 和 rightleft = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], 'key2': ['K0', 'K0', 'K0', 'K0'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}) pd.merge(left, right, on=['key1', 'key2'])20 - merge|左外连接如下图所示的结果连接 left 和 right,保留左表全部键pd.merge(left,right,how='left')21 - merge|右外连接如下图所示的结果连接 left 和 right,保留右表全部键 pd.merge(left,right,how='right', on=['key1', 'key2'])22 -merge|全外连接如下图所示的结果连接 left 和 right,保留全部键pd.merge(left,right,how='outer', on=['key1', 'key2'])23 -merge|内连接如下图所示的结果连接 left 和 right,保留交集pd.merge(left,right,how='inner', on=['key1', 'key2'])24 - merge|重复索引重新产生数据并按下图所示进行连接pd.merge(left, right, on='k', suffixes=['_l', '_r'])join - 组合25 - join|左对齐合并 left 和 right,并按照 left 的索引进行对齐left.join(right)26 -join|左对齐(外连接)按下图所示进行连接思考:merge 做法left.join(right,how='outer')27 - join|左对齐(内连接)按下图所示进行连接left.join(right,how='inner')28 -join|按索引重新产生数据并按下图所示进行连接(根据 key)left.join(right,on='key')29 - join|按索引(多个)重新产生数据并按下图所示进行连接(根据 key1 和 key2)left.join(right,on=['key1','key2'])8-金融数据与时间处理8-1pandas中的时间操作1-时间生成|当前时间使用pandas获取当前时间pd.Timestamp('now')Timestamp('2021-12-15 11:32:16.625393')2-时间生成|指定范围使用pandas按天生成2021年1月1日至2021年9月1日的全部日期pd.date_range('1/1/2021','9/11/2021')DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08', '2021-01-09', '2021-01-10', ... '2021-09-02', '2021-09-03', '2021-09-04', '2021-09-05', '2021-09-06', '2021-09-07', '2021-09-08', '2021-09-09', '2021-09-10', '2021-09-11'], dtype='datetime64[ns]', length=254, freq='D')3-时间生成|指定长度使用pandas从2021年1月1日开始,按天生成10天日期pd.date_range('2021-01-01',periods=10)DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08', '2021-01-09', '2021-01-10'], dtype='datetime64[ns]', freq='D')股票数据分析11 - 查看数据类型查看 df1 各列的数据类型df1.info()12 - 时间类型转换将 df1 和 df2 的 日期 列转换为 pandas 支持的时间格式df1['日期'] = pd.to_datetime(df1['日期'])df2['时间'] = pd.to_datetime(df2['时间'])13 - 日期筛选|区间筛选出 df2 时间在 2021-08-03 09:35:00 与 2021-08-04 15:00:00 之间的数据df2[(df2['时间']> '2021-08-03 09:35:00') & (df2['时间']< '2021-08-04 15:00:00' )]14 - 日期筛选|指定筛选 df2 时间为 2021-08-03 的全部数据df2.set_index('时间').truncate(after=pd.Timestamp('2021-08-04'))15 - 金融计算|涨跌额df1 新增一列 涨跌,计算前后两日收盘价之差注意:虽然我们的df1包含涨跌额列,但是这个操作很常用,所以练习一下df1.收盘.diff()16 - 金融计算|涨跌幅df1 新增一列 涨跌变化率,计算前后两日收盘价之差的变化率注意:虽然我们的df1包含涨跌幅列,但是这个操作很常用,所以练习一下,结果可以用于验证df1['涨跌变化率'] = (df1.收盘.pct_change()).apply(lambda x: format(x, '.2%'))17 - 金融计算|移动均值计算收盘价的5日移动均线df1.收盘.rolling(window=5).mean()18 - 金融计算|移动均值(可视化)计算并绘制收盘价的5日移动均线df1.收盘.rolling(window=5).mean().plot()19 - 金融计算|移动均值(可视化)同时计算并绘制 df1 的收盘价、5日均线、20日均线df1.set_index("日期")['收盘'].rolling(window=5).mean().plot() df1.set_index("日期")['收盘'].rolling(window=20).mean().plot() df1.set_index("日期")['收盘'].plot()20 - 金融计算|指数移动平均值(EMA)根据 df1 计算 EMA20df1['EMA20'] = df1['收盘'].ewm(span=20,min_periods=0,adjust=False,ignore_na=False).mean()21 - 金融计算|MACD计算 df1 的 MACD 指标exp1 = df1['收盘'].ewm(span=12, adjust=False).mean() exp2 = df1['收盘'].ewm(span=26, adjust=False).mean() df1['MACD'] = exp1 - exp2 df1['Signal line'] = df1['MACD'].ewm(span=9, adjust=False).mean()22 - 金融计算|布林指标计算并绘制布林指标,计算方法参考百度百科df1['former 30 days rolling Close mean'] = df1['收盘'].rolling(20).mean() df1['upper bound'] = df1['former 30 days rolling Close mean'] + \ 2*df1['收盘'].rolling(20).std() # 在这里我们取20天内的标准差 df1['lower bound'] = df1['former 30 days rolling Close mean'] - \ 2*df1['收盘'].rolling(20).std() import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['Songti SC'] #设置中文,如果本句代码导致失效,可以点击https://mp.weixin.qq.com/s/WKOGvQP-6QUAP00ZXjhweg df1.set_index("日期")[['收盘', 'former 30 days rolling Close mean','upper bound','lower bound' ]].plot(figsize=(16, 6)) plt.show()23 - 日期移动|值将 df1 的索引设置为日期,将 df1 数据向后移动一天df1.set_index(['日期']).shift(1)25 - 日期重采样|日 -> 周按周对 df1 进行重采样,保留每周最后一个数据df1.set_index('日期').resample('W').last()26 - 日期重采样|日 -> 月按月对 df1 进行重采样,保留每月最后一个数据df1.set_index('日期').resample('M').last()27 - 日期重采样|分钟 -> 日按日对 df2 进行重采样,保留每天最后一个数据df2.set_index('时间').resample('D').last()28 - 日期重采样|低频 -> 高频将 df2 的 5分钟 数据改为 3分钟,缺失数据向前填充df_3min = df2.set_index('时间').resample('3min').last()df_3min.ffill()
2021年12月22日
1,572 阅读
0 评论
2 点赞
2021-12-21
RedisDesktopManager 2021.9
Redis Desktop Manager (aka RDM) — is a fast Redis database management application for Windows, Linux and MacOS.Redis Desktop Manager(又名RDM)—是用于Windows,Linux和MacOS的快速Redis数据库管理应用程序。 https://vast.lanzouy.com/b0113yp8d 密码:i15b转载于吾爱破解
2021年12月21日
530 阅读
0 评论
0 点赞
2021-12-19
校友邦请求参数加密
function a(e, n) { var c = (65535 & e) + (65535 & n); return (e >> 16) + (n >> 16) + (c >> 16) << 16 | 65535 & c } function t(e, n, c, t, i, o) { return a((u = a(a(n, e), a(t, o))) << (r = i) | u >>> 32 - r, c); var u, r } function i(e, n, c, a, i, o, u) { return t(n & c | ~n & a, e, n, i, o, u) } function o(e, n, c, a, i, o, u) { return t(n & a | c & ~a, e, n, i, o, u) } function u(e, n, c, a, i, o, u) { return t(n ^ c ^ a, e, n, i, o, u) } function r(e, n, c, a, i, o, u) { return t(c ^ (n | ~a), e, n, i, o, u) } function d(e) { for (var n = 1732584193, c = -271733879, t = -1732584194, d = 271733878, h = 0; h < e.length; h += 16) { var s = n, l = c, b = t, k = d; c = r(c = r(c = r(c = r(c = u(c = u(c = u(c = u(c = o(c = o(c = o(c = o(c = i(c = i(c = i(c = i(c, t = i(t, d = i(d, n = i(n, c, t, d, e[h + 0], 7, -680876936), c, t, e[h + 1], 12, -389564586), n, c, e[h + 2], 17, 606105819), d, n, e[h + 3], 22, -1044525330), t = i(t, d = i(d, n = i(n, c, t, d, e[h + 4], 7, -176418897), c, t, e[h + 5], 12, 1200080426), n, c, e[h + 6], 17, -1473231341), d, n, e[h + 7], 22, -45705983), t = i(t, d = i(d, n = i(n, c, t, d, e[h + 8], 7, 1770035416), c, t, e[h + 9], 12, -1958414417), n, c, e[h + 10], 17, -42063), d, n, e[h + 11], 22, -1990404162), t = i(t, d = i(d, n = i(n, c, t, d, e[h + 12], 7, 1804603682), c, t, e[h + 13], 12, -40341101), n, c, e[h + 14], 17, -1502002290), d, n, e[h + 15], 22, 1236535329), t = o(t, d = o(d, n = o(n, c, t, d, e[h + 1], 5, -165796510), c, t, e[h + 6], 9, -1069501632), n, c, e[h + 11], 14, 643717713), d, n, e[h + 0], 20, -373897302), t = o(t, d = o(d, n = o(n, c, t, d, e[h + 5], 5, -701558691), c, t, e[h + 10], 9, 38016083), n, c, e[h + 15], 14, -660478335), d, n, e[h + 4], 20, -405537848), t = o(t, d = o(d, n = o(n, c, t, d, e[h + 9], 5, 568446438), c, t, e[h + 14], 9, -1019803690), n, c, e[h + 3], 14, -187363961), d, n, e[h + 8], 20, 1163531501), t = o(t, d = o(d, n = o(n, c, t, d, e[h + 13], 5, -1444681467), c, t, e[h + 2], 9, -51403784), n, c, e[h + 7], 14, 1735328473), d, n, e[h + 12], 20, -1926607734), t = u(t, d = u(d, n = u(n, c, t, d, e[h + 5], 4, -378558), c, t, e[h + 8], 11, -2022574463), n, c, e[h + 11], 16, 1839030562), d, n, e[h + 14], 23, -35309556), t = u(t, d = u(d, n = u(n, c, t, d, e[h + 1], 4, -1530992060), c, t, e[h + 4], 11, 1272893353), n, c, e[h + 7], 16, -155497632), d, n, e[h + 10], 23, -1094730640), t = u(t, d = u(d, n = u(n, c, t, d, e[h + 13], 4, 681279174), c, t, e[h + 0], 11, -358537222), n, c, e[h + 3], 16, -722521979), d, n, e[h + 6], 23, 76029189), t = u(t, d = u(d, n = u(n, c, t, d, e[h + 9], 4, -640364487), c, t, e[h + 12], 11, -421815835), n, c, e[h + 15], 16, 530742520), d, n, e[h + 2], 23, -995338651), t = r(t, d = r(d, n = r(n, c, t, d, e[h + 0], 6, -198630844), c, t, e[h + 7], 10, 1126891415), n, c, e[h + 14], 15, -1416354905), d, n, e[h + 5], 21, -57434055), t = r(t, d = r(d, n = r(n, c, t, d, e[h + 12], 6, 1700485571), c, t, e[h + 3], 10, -1894986606), n, c, e[h + 10], 15, -1051523), d, n, e[h + 1], 21, -2054922799), t = r(t, d = r(d, n = r(n, c, t, d, e[h + 8], 6, 1873313359), c, t, e[h + 15], 10, -30611744), n, c, e[h + 6], 15, -1560198380), d, n, e[h + 13], 21, 1309151649), t = r(t, d = r(d, n = r(n, c, t, d, e[h + 4], 6, -145523070), c, t, e[h + 11], 10, -1120210379), n, c, e[h + 2], 15, 718787259), d, n, e[h + 9], 21, -343485551), n = a(n, s), c = a(c, l), t = a(t, b), d = a(d, k) } return [n, c, t, d] } function h(e) { for (var n = "0123456789abcdef", c = "", a = 0; a < 4 * e.length; a++) c += n.charAt(e[a >> 2] >> a % 4 * 8 + 4 & 15) + n.charAt(e[a >> 2] >> a % 4 * 8 & 15); return c } <!-- www.lanol.cn lan小站 by:Lan --> function s(e) { for (var n = 1 + (e.length + 8 >> 6), c = new Array(16 * n), a = 0; a < 16 * n; a++) c[a] = 0; for (a = 0; a < e.length; a++) c[a >> 2] |= (255 & e.charCodeAt(a)) << a % 4 * 8; return c[a >> 2] |= 128 << a % 4 * 8, c[16 * n - 2] = 8 * e.length, c } var l = { hexMD5: function(e) { return h(d(s(e))) } }, b = new RegExp("[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"), k = (new RegExp("[\\u4E00-\\u9FFF]+"), function(e) { var n = ["`", "~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "+", "=", "|", "{", "}", "'", ":", ";", "'", ",", "[", "]", ".", "<", ">", "/", "?", "~", "!", "@", "#", "¥", "%", "…", "…", "&", "*", "(", ")", "—", "—", "+", "|", "{", "}", "【", "】", "‘", ";", ":", "”", "“", "’", "。", ",", "、", "?", '"'], c = ["content", "practicePurpose", "practiceContent", "practiceRequirement", "otherRequirement", "practiceDescript", "securityBook", "file", "uploadJson"]; for (var a in e) { var t = e[a] + ""; t && t.split("").some(function(e, t) { if (-1 < n.indexOf(e)) return -1 == c.indexOf(a) && c.push(a), !0 }) } return c }) <!-- www.lanol.cn lan小站 by:Lan --> function LanEncode(e, n) { for (var c = ["5", "b", "f", "A", "J", "Q", "g", "a", "l", "p", "s", "q", "H", "4", "L", "Q", "g", "1", "6", "Q", "Z", "v", "w", "b", "c", "e", "2", "2", "m", "l", "E", "g", "G", "H", "I", "r", "o", "s", "d", "5", "7", "x", "t", "J", "S", "T", "F", "v", "w", "4", "8", "9", "0", "K", "E", "3", "4", "0", "m", "r", "i", "n"], a = [], t = 0; t < 62; t++) a.push(t + ""); var i = Math.round((new Date).getTime() / 1e3), o = function(e, n) { for (var c, a, t = e.slice(0), i = e.length, o = i - n; i-- > o;) c = t[a = Math.floor((i + 1) * Math.random())], t[a] = t[i], t[i] = c; return t.slice(o) }(a, 20), u = ""; o.forEach(function(e, n) { u += c[e] }); var r = function(e) { if (null == e) return {}; for (var n = Object.keys(e).sort(), c = {}, a = 0; a < n.length; a++) c[n[a]] = e[n[a]]; return c }(e), d = ""; for (var h in r) - 1 != k().indexOf(h) || b.test(r[h]) || null != r[h] && "" !== r[h] && '""' !== r[h] && (d += r[h]); return d += i, d = (d = (d = (d = (d = (d = (d = (d = (d += u).replace(/\s+/g, "")).replace(/\n+/g, "")).replace(/\r+/g, "")).replace(/</g, "")).replace(/>/g, "")).replace(/&/g, "")).replace(/-/g, "")).replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, ""), d = encodeURIComponent(d), { md5: d = l.hexMD5(d), tstr: i, iArrStr: o && 0 < o.length ? o.join("_") : "" } }
2021年12月19日
609 阅读
1 评论
2 点赞
2021-12-12
BurpSuite2020 打开提示burpsuit to run burp suite using java 17+
解决方案: 根据报错提示,在命令行运行时后面加上这句代码:--add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED@echo off start "burpsuite" /B "javaw.exe" --add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED -Xmx8G -XX:-UseParallelGC -noverify -javaagent:BurpSuiteLoader.jar -Dfile.encoding=utf-8 -jar "%~dp0burpsuite_pro.jar" %* exit 0 推荐java版本为jdk16.0.2 下载链接:https://www.oracle.com/java/technologies/javase/jdk16-archive-downloads.html
2021年12月12日
2,105 阅读
0 评论
0 点赞
2021-12-04
花呗已关闭,12月8日起花呗默认授权上报征信
在上个月就想要关闭花呗了,因为女朋友不让用了。但是吧,淘宝遇到个奇葩老板,我东西都收货一个星期了,还是没点发货。然后今天我看见一条消息12月8日起花呗默认授权上报征信在花呗的设置里面新出了一条通知公告,比较隐秘大概就是要上征信了,本来我用花呗就是因为他不上征信然后没啥区别,所以就用着,但是这样的话,就得去关掉了。于是我又去联系了那个淘宝店铺,让他们点击发货。成功关闭花呗
2021年12月04日
682 阅读
2 评论
0 点赞
2021-11-27
快看漫画爬虫关键代码
import requests import re url = 'https://www.kuaikanmanhua.com/web/comic/288718/' for i in re.findall(f"}}\((.*?)\);", requests.get(url).text)[1][:-1].split(','): print(i.replace('"', '').replace(r'\u002F', '/')) if 'http' in i else ...剩下的自己慢慢清洗。
2021年11月27日
887 阅读
5 评论
4 点赞
1
...
22
23
24
...
88