首页
关于
Search
1
git lg彩色显示日志
28 阅读
2
在 Ubuntu 22.04 LTS 中安装 Docker
19 阅读
3
CentOs/Ubuntu搭建上网x-ui
18 阅读
4
git使用多个源和多个分支
15 阅读
5
清理Windows臃肿程序
15 阅读
默认分类
网站搭建
Windows
Linux
Docker
OpenWrt
Hackintosh
Git
Python
Web开发
JavaScript
FFmpeg
Demo
工具
刷机
油猴脚本
Excel
Chrome Extension
登录
Search
标签搜索
Pandas
读取
时区
Chrome
centos8
求和
Nginx
Typecho
404
csv
国际站
询盘导出
油猴脚本
bbr
Ubuntu
远程桌面
日志
log
数据清洗
打印机
野生程序猿
累计撰写
153
篇文章
累计收到
0
条评论
首页
栏目
默认分类
网站搭建
Windows
Linux
Docker
OpenWrt
Hackintosh
Git
Python
Web开发
JavaScript
FFmpeg
Demo
工具
刷机
油猴脚本
Excel
Chrome Extension
页面
关于
搜索到
153
篇与
的结果
2022-05-27
Tampermonkey阿里巴巴国际站批量导出之[询盘国家]
// ==UserScript== // @name 阿里巴巴国际站批量导出询盘国家或垃圾询盘 // @namespace http://tampermonkey.net/ // @version 0.0.3 // @description 在询盘页面,搜索按钮后面插入一个下载按钮,点击可以从头开始记录每个客户的分配记录,最终输出成JSON文件自动下载。 // @author Mike // @icon http://is.alicdn.com/favicon.ico // @match https://message.alibaba.com/message/* // @grant GM_addStyle // ==/UserScript== 'use strict'; var globalAllresult = []; var downloaded = false; var repeated = false; var pages = 0; // 下面这段代码生成下载方式 (function(console){ console.save = function(data, filename){ if(!data) { console.error('Console.save: No data found!') return; } if(!filename) filename = 'console.json' if(typeof data === "object"){ data = JSON.stringify(data, undefined, 4) } var blob = new Blob([data], {type: 'text/json'}), e = document.createEvent('MouseEvents'), a = document.createElement('a') //var text = await blob.text() a.download = filename a.href = window.URL.createObjectURL(blob) a.dataset.downloadurl = ['text/json', a.download, a.href].join(':') e = new MouseEvent ("click"); //e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null) !!!deprecated!!! a.dispatchEvent(e) } })(console) // 分配记录收集方法 function collectItems(){ var inquiryIds = document.getElementsByClassName('spec-inquiry-id'); var inquiryFlags = document.getElementsByClassName('ui2-flag'); //var levels = document.getElementsByClassName('aui-icon-buyer-level'); var customers = document.getElementsByClassName('spec-icon-wrap'); var result=[]; for (var i = 0; i < inquiryIds.length; i++) { console.log(inquiryIds[i].innerText,inquiryFlags[i].title); //console.log(levels[i]) var customer = customers[i].childNodes[3].src; console.log(customer) result.push({ 'inquiryId':inquiryIds[i].innerText, 'inquiryFlag':inquiryFlags[i].title, 'customer':customer }); } return result; } //与元数据块中的@grant值相对应,功能是生成一个style样式 GM_addStyle('#down_contacts_btn{color:#fb7d3c;}'); //下载按钮的html代码 var down_btn_html = '<span>'; down_btn_html += '<a href="javascript:void(0);" id="down_contacts_btn" class="S_txt2" title="一直点击,直到翻页到最后一页,自动下载,若无效请刷新重试">导出询盘国家</a>'; down_btn_html += '</span>'; var inner = document.createElement('span'); inner.innerHTML = down_btn_html; var down_input_html = '<span>'; down_input_html += '<input type="text" id="down_input" placeholder="页数" class="ui2-pagination-goto"</input>'; down_input_html += '</span>'; var inner_input = document.createElement('span'); inner_input.innerHTML = down_input_html; //将以上拼接的html代码插入到网页标签中 var ul_tag = document.getElementsByClassName('ui-dropdown-btn')[0].parentNode; console.log('ul_tag'); //console.log(ul_tag); if (ul_tag) { ul_tag.append(inner_input); ul_tag.append(inner); } var btn = document.getElementById('down_contacts_btn'); var type = document.getElementsByClassName('ui-dropdown-btn')[0].innerText btn.onclick = function(){ if (repeated) { confirm('请刷新页面后重试'); return; } if(downloaded) { repeated = true; return;//防抖,防止多次下载,刷新重启 } var nextBtn = document.getElementsByClassName('next')[0]; console.log(nextBtn); var ipt = document.getElementById('down_input').value; console.log('ipt:',ipt); if (undefined == nextBtn || (ipt-1) == pages){ console.log('没了'); let result = collectItems(); globalAllresult.push(result); globalAllresult = [].concat(...globalAllresult); if (type.indexOf('分配给') != -1) { console.save(globalAllresult,"InquiryCountry.json"); }else{ console.save(globalAllresult,"InquirySpam.json"); } downloaded = true; }else{ console.log('next page'); pages += 1 console.log('pages:',pages); let result = collectItems(); globalAllresult.push(result); nextBtn.click(); } }
2022年05月27日
5 阅读
0 评论
0 点赞
2022-05-25
Pandas常用函数之groupby()、agg()
import pandas as pd import numpy as np df = pd.DataFrame( data={ 'name': ['z_s', 'l_s', 'w_w', 'z_l', 'y_s', 'j_j', 'l_b', 'z_f', 'hs_q', 'lbl_k', 'qy_n', 'mg_n'], 'score': [100, 97, 98, 89, 67, 59, 29, 87, 78, 89, 88, 80], 'group': [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2], 'cls': ['A', 'A', 'A', 'B', 'B', 'B', 'A', 'A', 'A', 'B', 'B', 'B'], 'height': [178.0, 180.0, 176.0, 182.0, 189.0, 190.0, 172.5, 175.0, 165.0, 160.0, 158.5, 159.0] }, index=['stu_' + str(i) for i in np.arange(1, 13, 1)] ) print('df:\n', df)Pandas分组聚合分组聚合统计各个班的最高的成绩:# 先按照班级进行分组,再统计各个组里面的成绩的最大值! ret = df.groupby(by=['cls'])['score'].max().reset_index() print('ret:\n', ret)多重行索引分组聚合统计各个班的各个小组的最高成绩# 先按照班级分组,再按照小组分组,最后统计各个小组内成绩的最大值 ret = df.groupby(by=['cls', 'group'])['score'].max() print('ret:\n', ret) print('index:\n', ret.index) # MultiIndex ---多重行索引 ret = ret.reset_index() # 重设索引 print(ret)对多列数据进行分组聚合统计各个班级的成绩、身高的平均值:# 按照班级分组,统计各个组内 成绩、身高的平均值 ret = df.groupby(by=['cls'])[['score', 'height']].mean().reset_index() print('ret:\n', ret)综合应用# 先按照班级分组、再按照小组分组---统计各个小组内的成绩的平均值、身高的平均值 ret = df.groupby(by=['cls', 'group'])[['score', 'height']].mean().reset_index() print('ret:\n', ret)聚合函数 agg统计成绩、身高的最大值、均值# 使用agg 方法 可以对多列数据一次性求出多个指标 ret = df.loc[:, ['score', 'height']].agg([np.max, np.mean]) print('ret:\n', ret)对多列数据统计不同的指标统计成绩的均值、同时统计身高的最大值# 使用agg 方法 可以对多列数据一次性求出多个指标 ret = df.agg({'score': [np.mean], 'height': [np.max]}) print('ret:\n',ret)对多列数据统计不同个数的指标统计成绩的均值、最大值、中位数 和 身高的均值# 使用agg 方法 可以对多列数据一次性求出多个指标 ret = df.agg({'score': [np.mean, np.max, np.median], 'height': [np.mean]}) print('ret:\n', ret)使用agg 方法也可以配合着 分组 对不同列、不同的数据、统计不同个数的 不同指标!ret = df.groupby(by=['cls']).agg({'height': [np.max,np.mean], 'score': [np.min]}) print('ret:\n', ret)agg调用 自定义函数ret = df.loc[:, 'score'].agg(lambda x: x + 1) print('ret1:\n', ret) def func_add_one(x): return x + 1 ret = df.loc[:, 'score'].agg(func_add_one) print('ret2:\n', ret) # 对多列 使用自定义函数 ret = df.loc[:, ['score', 'height']].agg(func_add_one) print('ret3:\n', ret)使用agg 调用numpy的统计指标# 统计所有同学成绩的和 ret = df.loc[:, 'score'].agg(np.sum) print('ret:\n',ret) print('type:\n',type(ret)) # # 统计所有同学 成绩以及身高 的和 ret = df.loc[:, ['score', 'height']].agg(np.sum) print('ret:\n', ret) print('type:\n',type(ret)) # 统计身高 + 成绩(无意义的,只是为了演示能够 同一行相加) ret = df.loc[:, ['score', 'height']].agg(np.sum, axis=1) # 使用axis指定相加的方向 print('ret:\n', ret) print('type:\n',type(ret))
2022年05月25日
7 阅读
0 评论
0 点赞
2022-05-23
Pandas常用函数之rename()
df.rename()df.rename(mapper=None,index=None,columns=None,axis=None,copy=True,inplace=False,level=None)index,columns:表示待转换的行索引和列索引。axis:表示轴的名称,可以使用index或columns,也可以使用数字0或1。copy:表示是否复制底层的数据,默认为False。inplace:默认为False,表示是否返回新的Pandas对象。如果设为True,则会忽略复制的值。 //相当于是否创建副本修改数据,还是直接在原数据直接修改level:表示级别名称,默认为None。对于多级索引,只重命名指定的标签。import pandas as pd #重命名轴索引 df=pd.DataFrame({'A':['A0','A1','A2','A3'] ,'B':['B0','B1','B2','B3'] ,'C':['C0','C1','C2','C3']}) df.rename(columns={'A':'a','B':'b','C':'c'},inplace=True) #columns可以接受一个字典, 键为 旧索引 ,值为 新索引 df.rename(index={1:'a',2:'b'}) # index 也可以接受一个字典,键为 旧索引 ,值为 新索引可以用lower方法把字符串变成小写:import pandas as pd jk=pd.DataFrame({'A':['A0','A1','A2','A3'] ,'B':['B0','B1','B2','B3'] ,'C':['C0','C1','C2','C3']}) jk.rename(str.lower,axis='columns') #使用str中的lower()方法把字符串变成小写,根据 axis 指定变得地方,是要求是字符串才能变
2022年05月23日
3 阅读
0 评论
0 点赞
2022-05-21
Tampermonkey阿里巴巴国际站批量导出之[询盘分配记录]
// ==UserScript== // @name 阿里巴巴国际站批量导出分配记录 // @namespace http://tampermonkey.net/ // @version 2.1.3 // @description 在询盘分配页面,搜索按钮后面插入一个下载按钮,点击可以从头开始记录每个客户的分配记录,最终输出成JSON文件自动下载。再结合Python程序生成Excel表格。 // @author Mike // @icon http://is.alicdn.com/favicon.ico // @match https://message.alibaba.com/message/* // @grant GM_addStyle // ==/UserScript== 'use strict'; var globalAllresult = []; var downloaded = false; var repeated = false; // 下面这段代码生成下载方式 (function(console){ console.save = function(data, filename){ if(!data) { console.error('Console.save: No data found!') return; } if(!filename) filename = 'console.json' if(typeof data === "object"){ data = JSON.stringify(data, undefined, 4) } var blob = new Blob([data], {type: 'text/json'}), e = document.createEvent('MouseEvents'), a = document.createElement('a') //var text = await blob.text() a.download = filename a.href = window.URL.createObjectURL(blob) a.dataset.downloadurl = ['text/json', a.download, a.href].join(':') e = new MouseEvent ("click"); //e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null) !!!deprecated!!! a.dispatchEvent(e) } })(console) // 分配记录收集方法 function collectItems(){ var contactEmails = document.getElementsByClassName('contact-email'); var contactNames = document.getElementsByClassName('contact-name'); var assignContents = document.getElementsByClassName('assign-content'); var assignDates = document.getElementsByClassName('assign-date'); var assignTimes = document.getElementsByClassName('assign-time'); var productWrapprs = document.getElementsByClassName('product-wrappr'); var result=[]; for (var i = 0; i < contactEmails.length; i++) { console.log(contactEmails[i].innerText,contactNames[i].innerText) var url_pic = '' if ("product-img" == productWrapprs[i].childNodes[0].classList.value){ url_pic = productWrapprs[i].childNodes[0].src } result.push({ 'contactEmail':contactEmails[i].innerText, 'contactName':contactNames[i].innerText, 'assignContent':assignContents[i].innerText, 'assignTime':assignDates[i].innerText + ' ' + assignTimes[i].innerText, 'productWrappr':productWrapprs[i].innerText, 'url_pic':url_pic }); } return result; } //与元数据块中的@grant值相对应,功能是生成一个style样式 GM_addStyle('#down_contacts_btn{color:#fb7d3c;}'); //下载按钮的html代码 var down_btn_html = '<span>'; down_btn_html += '<a href="javascript:void(0);" id="down_contacts_btn" class="S_txt2" title="一直点击,直到翻页到最后一页,自动下载,若无效请刷新重试">导出分配记录</a>'; down_btn_html += '</span>'; var inner = document.createElement('span'); inner.innerHTML = down_btn_html; //将以上拼接的html代码插入到网页标签中 var ul_tag = document.getElementsByClassName('search-box')[0].parentNode; if (ul_tag) { ul_tag.append(inner); } var btn = document.getElementById('down_contacts_btn'); btn.onclick = function(){ if (repeated) { confirm('请刷新页面后重试'); return; } if(downloaded) { repeated = true; return;//防抖,防止多次下载,刷新重启 } var nextBtns = document.getElementsByClassName('next-btn-helper'); var n = nextBtns.length-1; if (nextBtns[n].innerText != '下一页') { n = n-1; } console.log(nextBtns[n].innerText); var nextBtn = nextBtns[n].parentNode if(!nextBtn.disabled) { console.log('next page'); let result = collectItems(); globalAllresult.push(result); nextBtn.click(); }else{ console.log('page end'); let result = collectItems(); globalAllresult.push(result); globalAllresult = [].concat(...globalAllresult); console.save(globalAllresult,"Inquiry&TM.json"); downloaded = true; } // 下载数据,第一个参数是数据对象,第二个参数是要保存成文件的名字。 }
2022年05月21日
5 阅读
0 评论
0 点赞
2022-05-20
Pandas常用函数之read_csv()
pd.read_csv()pd.read_csv( filepath_or_buffer: 'FilePathOrBuffer', sep=<no_default>, delimiter=None, header='infer', names=<no_default>, index_col=None, usecols=None, squeeze=False, prefix=<no_default>, mangle_dupe_cols=True, dtype: 'DtypeArg | None' = None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression='infer', thousands=None, decimal: 'str' = '.', lineterminator=None, quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, encoding_errors: 'str | None' = 'strict', dialect=None, error_bad_lines=None, warn_bad_lines=None, on_bad_lines=None, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None, storage_options: 'StorageOptions' = None, )分隔符 sep# str, default ‘,’ # 数据分隔转化是逗号, 如果是其他可以指定 pd.read_csv(data, sep='\t') # 制表符分隔 tab pd.read_table(data) # read_table 默认是制表符分隔 tab pd.read_csv(data, sep='|') # 制表符分隔 tab pd.read_csv(data,sep="(?<!a)\|(?!1)", engine='python') # 使用正则引擎 engine使用的分析引擎,可以选择C或者是python。C 语言速度最快,python 的功能最为完善。# engine=None, {‘c’, ‘python’, ‘pyarrow’}, optional pd.read_csv(data, engine='c')列数据处理 converters对列的数据进行转换,列名与函数组成的字典。key 可以是列名或者列的序号。# dict, default None data = 'x,y\na,1\nb,2' def foo(p): return p+'s' # x 应用函数, y 使用 lambda pd.read_csv(StringIO(data), converters={'x': foo, 'y': lambda x: x*3}) # 使用列索引 pd.read_csv(StringIO(data), converters={0: foo, 1: lambda x: x*3})编码 encoding指定字符集类型,通常指定为'utf-8'。 参见 Python标准编码列表 。如果不知道文件是什么编码,可以借助 codecs 和 chardet 这两个三方库在检测文件的编码方式。# str, default None pd.read_csv('gairuo.csv', encoding='utf8') pd.read_csv("gairuo.csv",encoding="gb2312") # 常见中文 # 其他常用编码 ISO-8859-1 latin-1 gbk
2022年05月20日
2 阅读
0 评论
0 点赞
1
...
29
30
31