精华内容
下载资源
问答
  • 2020-11-24 08:59:36

    o55g08d9dv.jpg广告关闭

    腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!

    如何计算python中的平均顶部或底部n值? 例如,column = c2计算过去4天中前2名的平均值。 c0 c1 c21 2 na2 2 na3 3 na4 5 45 6 5.56 7 6.57 5 6.58 4 6.59 5 610 5 5...

    python 环境:python2. 7.12 x64ide : wing ide professional 5.1. 12-1题目:求数组元素的平均值#求数组元素的平均值 a=b=len(a)sum=0print 数组长度为:,bfor i in a: sum=sum+iprint 均值为:,sumb?...

    大约有7500个x值和相应的y值(因此每x一个y)。 它看起来像这样: ? 中间的蓝线是我尝试绘制绘图线失败的结果,该绘图线代表我的数据的平均值。 码:import numpy as npimport matplotlib.pyplot aspltdata=np.genfromtxt(data.csv)temp_av=)]*len(data)plt.figure()plt.subplot(111)plt.scatter(data,data)plt.plot...

    作者:司开星http:blog.csdn.netchromingarticledetails46471155用python写了一个抓取上海地区二手房价格的程序,python2.7,数据来自赶集网。 由于在赶集网查看房价不需要登录,所以程序也十分简单。 程序代码如下:源代码托管在:https:github.comchromingsh_house_price # -*- coding:utf-8 -*-import requestsimp...

    我正在做一些研究,我正在基于这个数学表达式在python中实现移动平均值: ? 其中:n =样本,w1 =窗口 我这样实现: def movingaverage(signal, window):sum = 0 maver = #end-for maver.append(sum window) sum = 0 #end-for zeros =*k maver = zeros + maver + zeros return maver 它工作得很好。 但是我试图找到...

    我有一个列表:类似: data = , , , ] 我想把这个算出来...

    前言在《python数据清洗--类型转换和冗余数据删除》中分享了有关数据类型转换和冗余信息删除的两个知识点,接下来继续讲解缺失值的识别和处理办法。 缺失值指的是由于人为或机器等原因导致数据记录的丢失或隐瞒,缺失值的存在一定程度上会影响后续数据分析和挖掘的结果,所以对他的处理将显得尤为重要。 缺失值的识别...

    u519gbxgxe.jpeg

    (1)简单统计量分析 可以先对变量做一个描述性统计,进而查看哪些数据是不合理的。 最常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出了合理的范围。 如客户年龄的最大值为199岁,则该变量的取值存在异常。 (2)3原则 如果数据服从正态分布,在3原则下,异常值被定义为一组测定值中与平均值的偏差...

    本文介绍python扩展库numpy的函数average()的用法。 import numpy as np# 创建二维矩阵>>> x = np.matrix(, ])# 设置权重>>> w1 = #纵向计算加权平均>>> np.average(x, axis=0, weights=w1)matrix(])>>> w2 = #横向计算加权平均>>> np.average(x, axis=1, weights=w2)matrix(, ])>>>np.average(x, axis=1, weights=w2...

    换句话说,如果日期为2015-03-02的所有列的平均值为80.018,我只希望保留该特定日期的值在-19.982到180.018之间的列。 所以在这个例子中,我会排除d列,因为它的值超出了这个范围。 我也不想遍历dataframe的行,所以我正在寻找一个非常仿生的解决方案...

    我有一个深度和其他值列的数据框:data = {depth: , value1:, value2: } df = pd.dataframe(data)正如你所看到的那样,有些重复depth。 我希望能够以某种方式组合间隔和平均值。 例如,我希望的输出是:intervals =获取间隔列表并将这些间隔上的数据集分解为每个值的平均值(value1,value2)以获得depth value1 ...

    本文涉及python元组的运算及函数方法元组元组与列表类似,都是一种序列,但是列表可以被修改,而元组不能被修改; 元组用()创建,列表用)#输出:(l, o, g) 注意左闭右开元组中的元素是不允许修改的,不过我们可以对元组进行组合,如下所示:#元组的元素不允许重新赋值修改tup_1 = (hello , logic)tup_1 =你好print(tup...

    输入:numpy的array输出:一个一维的平均值arrayimport numpy as np def non_zero_mean(np_arr):exist = (np_arr != 0) num = np_arr.sum(axis=1) den = exist.sum(axis=1) returnnumden如果要求按行的非零元素的平均值,把所有的 axis=1改成axis=0补充知识:python dataframe 统计行列中零值的个数1、按行统计,返回...

    但请再思考一下,如果你把方案二的代码换成另外一种语言,比如 java,它是不是基本可以做到 1:1 的完全翻译? 换句话说,它虽然效率高、代码直接,但是它没有完全利用好 python 世界提供的规则,最大化的从中受益。 如果要具体化这个问题里的“规则”,那就是 “python 拥有内置结构集合,集合之间可以进行差值等四则...

    运行平台: windows python版本: python3.6 ide: sublime text 其他工具:chrome浏览器0、写在前面的话本文是基于基础版上做的修改,如果没有阅读基础版,请移步 python爬虫抓取智联招聘(基础版)在基础版中,构造url时使用了urllib库的urlencode函数: url = https:sou.zhaopin.comjobssearchresult.ashx?...

    我想计算每个键和打印结果的平均值,以便结果显示关键和相关的平均值。 以下代码计算平均值,但我不知道如何将密钥与平均值相关联。 我想要的答案是mean = {22:average1,23:average2,24:average3}。 mydict = {22: , 23: , 24: } mean =...

    作者:二十一 来源:https:segmentfault.coma1190000018737045大家好,我是咸鱼,之前推送过不少关于 python 的知识合集,反响不错,今天继续给大家带来一篇关于 python 相关知识的内容合集,希望大家喜欢。 本篇内容的作者是二十一文章来源:https:segmentfault.coma1190000018737045咸鱼在这篇内容的基础上修改并...

    python概述简介 python是一种解释性,面向对象,动态数据类型的高级程序语言, 解释型,无编译过程,逐行解释为二进制 交互性,直接执行程序 应用广泛, 编译型:一次将所有编译为二进制 特点 易于学习 易于维护 易于阅读 广泛的标准库 互动模式可移植 可扩展:兼容c语言,可调用 数据库 gui编程 可嵌入,c调python 缺点 运行慢...

    我有第一张带水印的照片,使用代码:import cv2import numpy as np img = cv2.imread(veidz.jpg) alpha = 2.0beta =-160 new = alpha * img + betanew = np.clip(new, 0, 255).astype(np.uint8)cv2.imwrite(cleaned.png, new) 我得到第二张没有水印的照片,但它变得更清晰,所以我有一个问题,是否有任何方法可以应用...

    7pzrew4e05.png

    在使用python进行数据分析时,如果数据集中出现缺失值、空值、异常值,那么数据清洗就是尤为重要的一步,本文将重点讲解如何利用python处理缺失值创建数据为了方便理解,我们先创建一组带有缺失值的简单数据用于讲解 ? 检查缺失值对于现在的数据量,我们完全可以直接查看整个数据来检查是否存在缺失值看到有两列含有...

    更多相关内容
  • 2) 动态Selector:通配符 * (号):代替任意个字符。 ? (问号):代替任意一个字符。 实例1:如何让UiPath识别出一个名为“DailyReport - ”加上当天的日期的文本文件。 方法:将动态的部分,在这里即日期,用*表示...

    9f23a7076ffeacf9c050a8bc9a16ef6f.png

    书接前文,在我们的上一篇微文“RPA经验分享 | 理论指导实践 UiPath的基本IT术语”中,我们给大家介绍了UiPath的一些IT术语。下面就让我们来一起学习UiPath中如何快速配置和建立稳定的选择器。

    77315e1d0826edc6d09c754509a53dfd.png

    重点知识1:了解Selector

    UI就是很多个互相嵌套的容器,使用UI Explorer工具可以帮助我们了解UiPath怎么去识别某个UI中的元素,了解Selector的工作原理。

    f197835284ace963a25e0ef138a52449.png

    1) 点击工具栏上的Select Target Elements,再点击UI界面中的某个元素。

    f9cad0ed446205bc2ea54731128183af.png

    2) 该UI元素的Selector显示在下面的模块(SelectorEditor Panel)里,而左边的模块(VisualTree Panel)里是一个完整的UI树状图,包含了UI所有的元素。

    efa3107fdb25b072f840ffe597f8d115.png

    3) 点击Highlight工具,然后在UI Tree里选中某个元素,此时UI中对应的元素会被黄色的矩形框起来,方便查看。

    b5ac208110bf2208d444fba34c0ecdd9.png

    4) 如果某个元素未被识别(在选取这个元素时没有出现蓝色的矩形框),可以更改UiFrameworks的选项,再重新指定元素。

    UiFrameworks用于更改确定UI元素及其Selector的技术

    Default:UiPath的专有方法。通常适用于所有类型的用户界面。

    Active Accessibility:Microsoft早期提供的一种使应用程序可访问的解决方案。当Default方法不起作用,而软件是比较旧的版本时,推荐尝试这种方法。

    UI Automation:Microsoft改良过的访问模式。当Default方法不起作用,而软件是比较新的版本时,推荐尝试这种方法。

    1ee98a860fb72ed9262a33fc75033b87.png

    5) 上面的模块(Property Explorer Panel)显示的是未优化的原始Selector,它包含了目标元素的完整路径。下面的模块则是优化过的最终Selector。

    UiPath默认使用第一层和最后一层容器来构成最终的Selector,因此优化过的Selector里的元素会少一些。

    选择或者取消选择某一行,可以在最终的Selector里添加或删除元素。

    83316a4e4118cb068f41ccaaad0c1200.png

    6) 优化后的Selector是标准的XML代码,它由两部分构成:

    元素类型:wnd和uia。元素的类型一目了然,比如window,control,HTML,Java等等.

    属性(Attributes):元素类型后面的部分,它是Selector识别特定元素的关键。

    下列代码的第一行表示名为applicationframehost.exe的应用程序,该程序的Class是ApplicationFrameWindow,标题是All Calendars - Calendar。如果任一条件不匹配,就找不到这个应用程序。

    55c81434110f684288e1435a39e2b18e.png

    7) 属性显示在右边的模块(Selector Attributes Panel)。选择或者取消选择某个属性,会相应的更改Selector。

    ea2fb41391877e2050e3528e4dca4ca1.png

    总结:Selector就是UI元素和相关属性的列表,UiPath根据这些信息去匹配屏幕上已有的元素。

    注意:在一些情况下,当UiPath和目标应用程序时用不同的权限打开的,Selector可能无法正常作用。推荐总是用相同的权限打开程序。

    重点知识2:如何建立稳定的Selector

    实例:用Basic方式录制一个Sequence,在名为SelectorsTest.txt的文本文件里录入一段文字。

    分析:

    1) 查看Type Into活动的属性面板,打开Selector Editor。

    2) 关掉SelectorsTest.txt,打开五个新记事本并运行Sequence,30秒后UiPath将报错。

    * 这种提示大部分都是Selector出现问题。

    8e08d23816d7587d7c305ad53e5d8c2b.png

    3) 问题出在title属性上。由于指定了标题,当SelectorsTest.txt没有打开时,程序就无法正常运行。

    31d39c5665cf582342d7ae395e5f2b14.png

    4) 考虑到你是想让这个程序在任何文本文件里都可以运行,还是只在指定的文件里运行,这可以是一个bug,也可以不是。

    5) 如果想要程序在任何文本文件里运行,只要删除title属性就可以了。

    6) 重新运行程序。虽然打开了五个记事本,但程序只会在最上层的记事本里运行。

    *SelectorEditor和UI Explorer有所不同。在Selector Editor的Edit Attributes模块里,该Selector包含的所有UI元素的相关属性都会列出来。而在UI Explorer里,只会显示选中的那个UI元素的相关属性。

    点击左下角的Openin Explorer可以在UIExplorer里查看和修改更多的UI元素和属性。你也可以在Selector Editor的Edit Selector模块里手动修改代码。

    重点知识3. 自定义Selector

    1)Full Selector和PartialSelector

    FullSelector:包含了确定该UI元素位置的所有必要信息,其中包括顶级窗口的信息。

    ab363eeb6b599e399238a6099065b767.png

    PartialSelector:不包括顶级窗口的信息,但是嵌套在一个包含了顶级窗口信息的容器中,比如Attach Window活动,Open Application活动。

    d6f679d32a0d9c0ae298ef8f00eb517c.png

    除了是否包含顶级窗口的信息,FullSelector和PartialSelector没有什么区别。在同一个窗口执行多个操作时建议使用Partial Selector;需要在多个窗口之间切换时建议使用Full Selector。如果可能受到其他应用程序或窗口的干扰,最好使用Partial Selector。

    *FullSelector也可以在AttachWindow或者Open Application等的容器中使用。

    *录制功能的Basic模式使用的都是Full Selector,Desktop模式使用的都是Partial Selector。

    2) 动态Selector:通配符

    * (星号):代替任意个字符。

    ? (问号):代替任意一个字符。

    实例1:如何让UiPath识别出一个名为“DailyReport - ”加上当天的日期的文本文件。

    方法:将动态的部分,在这里即日期,用*表示。

    f9f0e02bc04f0102c60dca86c8581915.png

    2daff33a62b2156a0c369b2ffccf837e.png

    实例2:首先在亚马逊首页查询书A的价格,接着用Basic模式录制下列操作:选中并清空搜索栏,输入书B的名称并查询,读取书B的价格并用Message Box显示。

    运行程序30秒钟后,将收到下面的错误信息。

    2d770aaf59d89ededf4c41ad870d0c8d.png

    分析:由于首先查询了书A,在录制过程中浏览器的标题包含书A的名称。但是在录制结束后,浏览器的标题已经变成了书B,因此UiPath无法识别出浏览器窗口来运行程序。

    2cadb7de38f8a2ec061329bfe61c0ac2.png

    方法:可以直接去掉title属性。但是更好的方法是,把书A的名称替换为通配符*。GetText活动的Selector也需要相应的修改。

    3) 动态Selector:Attach to Live Element

    如果不使用通配符的方法修改Selector,还可以使用Attach to Live Element。

    找到出错的Selector,点击Selector Editor右上角的Attach to Live Element,然后再次点击UiPath运行时没能识别出的元素,比如实例2中的搜索栏。UiPath会将之前的Selector和这一次的进行对比,用*代替其中不同的部分。

    b7d3408f05dfdced0e6ae52ab685b65b.png

    4) 动态Selector:Index

    Index告诉UiPath应该选择第几个UI元素。

    实例:在记事本中录制一个更改字体的Sequence,并把它改成选择第四种字体。

    方法:录制完成后,从Selector Editor中打开UI Explorer。如果我们去掉字体名称的属性,它将会被自动替换为idx=4。

    3e71eb1cd38e5a9725518170124e2590.png

    5b87205050d045a8846cecedaa8976e2.png

    *如果在一个Selector中出现了Index属性,这是一个信号,说明现有的属性不足以让UiPath识别出目标UI元素,因此需要依靠Index属性来找到它。但是这样的Selector是不可靠的,我们应该尝试添加其他上级元素或者属性而避免使用Index。

    *应尽量避免使用大于2的Index属性,尝试添加其他的属性来确保Selector的稳定性。

    5) 动态Selector:变量

    实例:用户输入一个0-9的数字,在Windows自带的计算器中标亮这个数字。

    方法:

    • 添加一个InputDialog方法,要求用户输入0-9的数字,输出变量digit
    • 添加一个Highlight方法,然后随便指定一个计算器中的数字,这里指定0。
    • 用UIExplorer查看计算器的UI元素,找出哪一个属性与数字有关。

    58ef1fa9c80a0d24a2b401ae75ba6fa4.png

    100d1582eb56211cd900b52db18c0a90.png

    包含有数字的属性只有Automationid,需要保留。Name属性与数字的英文有关,它是动态的,必须去掉。稳妥起见,可以把cls='Button'属性和整个NumberPad元素去掉。最终的Selector如下图所示。

    318c3411e7117085bf23fae52424a856.png

    最终得到的Selector复制到Highlight活动的Selector里,然后在属性面板里把Selector里修改为<uia automationid='num" + dight +"Button'/>。

    • 一定要在属性面板里修改,因为Selector Editor里的Selector是不带引号的。
    • 另一个思路是声明一个String型的变量,然后用Replace方法把Selector里的0替换为该变量。

    *创建更可信的Selector

    实例:

    http://rpachallenge.com网站提供了一个关于RPA的练习。在这个网站上,每点一次Submit,信息的排列顺序和位置都会改变。如何让UiPath总能定位到First Name的文本框并填入Mack的名字?

    分析:

    1) 首先使用UI Explorer分析First Name文本框的Selector,该Selector有一个id属性是唯一的。

    63ce1cd6d6b60bace480955f29178142.png

    2) 点击网页上的Submit按钮进入下一页,新的First Name文本框的id属性值和上一个不同。这说明id属性是动态的,无法每次都定位到First Name文本框。

    70b7226e8fcd452543608342efc61649.png

    3) 文本框元素里没有任何一个属性与First Name有关。但是它的上级元素有一个aaname属性提到了First Name,我们把这个元素添加到Selector里。

    4) 该元素里的css-selector属性是唯一的,但是只要网页设计稍作调整,这个属性就会发生变动,因此要把它去掉。

    6d9ada670fcc3b789eec9d21df3cf065.png

    5) 去掉css-selector属性后,UiPath会自动为该元素添加idx='2'属性,这说明现有的属性可能不足以确定该元素的位置。其原因是:除了css-selector属性外,该元素和它的上级元素的其他属性(aaname/ parentidid/ id)是相同的。只要把该元素的上级元素也选上,idx='2'就会消失。记得去掉新添加的元素的css-selector属性。

    93912a0048b13eb8f885c778e46f9bb1.png

    6) 这个Selector是能用的,但是它存在很大的缺陷:一是该Selector仅能在特定的网页结构下运行;二是为Selector添加过多的上级元素会让它变得不稳定,因为上级元素只要稍有变化就会发生错误。

    *点击对号按钮可以检查当前Selector的有效性。

    660d03faffa160b4494e15c124e80d21.png

    方法:此处提供两种更稳妥的方法解决上述问题。

    1) 使用Anchor Base方法:

    在该方法的容器中,左边放锚点(anchor)活动,右边放要运行的其他活动。

    7864ec479b5fc47d0e3b57b2ccf000c7.png

    FindElement活动或FindImage活动可以作为锚点。Find Element活动同样通过Target里的各种属性来定位UI元素,但不同的是它会输出一个UIElement对象。稍后,我们将用这个对象创建一个更可信的Selector。

    282fc45a9097f82db6e63f9feaf5d4d1.png

    先指定网页上的FirstName标签(Label)作为锚点,标签的Selector通常非常稳定。

    ac9d6daf21d3a44c405679e9fcc01ddb.png

    在Anchor Base容器的右边,添加Type Into活动用来在文本框里输入Mack的名字。指定First Name标签右边的文本框作为TypeInto活动的目标元素,可以看到它的Selector里只有一个tag属性,并没有id等动态属性。

    AnchorBase活动的原理是UiPath将以指定的锚点作为参考,选取屏幕上离它最近的符合Selector条件(webctrl tag='INPUT')的UI元素,这样做缩小了搜索范围。

    b958f5e3b1f1bd7767f3c929242382ea.png

    AnchorBase活动有一个非常有用的属性AnchorPosition。它的默认值是Auto,但是如果锚点相对于目标元素的位置总是固定的,就可以把它改为其他值。在本例中它不是固定的,因为有时候文本框在标签的左边,有时候在下边。

    5d5bc8e235dbc9316ee693a0cf35fefb.png

    由于AnchorBase活动通过锚点和目标元素在屏幕上的相对位置来进行定位,因此它无法在后台运行。

    2) 使用Select Relative Selector

    打开UI Explorer,先指定First Name文本框。点击左上角工具栏里的Select Relative Element。

    8f4541e5eecf38c9da30d38c8d5a06af.png

    此时进入选取模式,选取FirstName的标签文字。这样做会在列表中添加新的关于FirstName标签的元素:webctrl和nav。nav的up属性可以导航到父元素,再从它的子元素列表里选择目标元素(...that locates the First Name label,navigates up to the parent element level and then selects the input in the listof children elements.)。同时别忘了去掉文本框的id属性。

    • nav支持的其他属性有next和prev,分别表示前往结构树的下一个或者上一个元素(...which go to the next or the previouselements in the tree respectively.)。

    943287d734790702d8b48bc13cc6944d.png

    添加一个TypeInto活动,把得到的Selector 复制到该活动的Selector属性里,大功告成。

    使用SelectRelative Selector功能,程序是可以在后台运行的,因为该功能基于应用程序的内部结构而非屏幕上的位置。

    本文转自公众号“伊路人生”

    展开全文
  • 2) 动态Selector:通配符 * (号):代替任意个字符。 ? (问号):代替任意一个字符。 实例1:如何让UiPath识别出一个名为“DailyReport - ”加上当天的日期的文本文件。 方法:将动态的部分,在这里即日期,用*表示...

    书接前文,在我们的上一篇微文“RPA经验分享 | 理论指导实践 UiPath的基本IT术语”中,我们给大家介绍了UiPath的一些IT术语。下面就让我们来一起学习UiPath中如何快速配置和建立稳定的选择器。

    aa83346a32b3136dec1f4c56f01ae431.png
    2103a15498c96e33900186d8169d1638.png

    重点知识1:了解Selector

    UI就是很多个互相嵌套的容器,使用UI Explorer工具可以帮助我们了解UiPath怎么去识别某个UI中的元素,了解Selector的工作原理。

    ab6c5b180a69bd1bb7bc2418a2bafdff.png

    1) 点击工具栏上的Select Target Elements,再点击UI界面中的某个元素。

    ede0819d5cfb23b587230fc49bc465e1.png

    2) 该UI元素的Selector显示在下面的模块(SelectorEditor Panel)里,而左边的模块(VisualTree Panel)里是一个完整的UI树状图,包含了UI所有的元素。

    f91a3cf4c883b53aa4b32342023f4c05.png

    3) 点击Highlight工具,然后在UI Tree里选中某个元素,此时UI中对应的元素会被黄色的矩形框起来,方便查看。

    453f908f75bfda4e90d1610428546fb1.png

    4) 如果某个元素未被识别(在选取这个元素时没有出现蓝色的矩形框),可以更改UiFrameworks的选项,再重新指定元素。

    UiFrameworks用于更改确定UI元素及其Selector的技术

    Default:UiPath的专有方法。通常适用于所有类型的用户界面。

    Active Accessibility:Microsoft早期提供的一种使应用程序可访问的解决方案。当Default方法不起作用,而软件是比较旧的版本时,推荐尝试这种方法。

    UI Automation:Microsoft改良过的访问模式。当Default方法不起作用,而软件是比较新的版本时,推荐尝试这种方法。

    247320d923d4178873a4876393ad4f92.png

    5) 上面的模块(Property Explorer Panel)显示的是未优化的原始Selector,它包含了目标元素的完整路径。下面的模块则是优化过的最终Selector。

    UiPath默认使用第一层和最后一层容器来构成最终的Selector,因此优化过的Selector里的元素会少一些。

    选择或者取消选择某一行,可以在最终的Selector里添加或删除元素。

    198fd1dd66300f6cff7bd2ca521ff7b6.png

    6) 优化后的Selector是标准的XML代码,它由两部分构成:

    元素类型:wnd和uia。元素的类型一目了然,比如window,control,HTML,Java等等.

    属性(Attributes):元素类型后面的部分,它是Selector识别特定元素的关键。

    下列代码的第一行表示名为applicationframehost.exe的应用程序,该程序的Class是ApplicationFrameWindow,标题是All Calendars - Calendar。如果任一条件不匹配,就找不到这个应用程序。

    3db7d0cb9362255f34b0e876a8922b57.png

    7) 属性显示在右边的模块(Selector Attributes Panel)。选择或者取消选择某个属性,会相应的更改Selector。

    0548eaa96cde4c31051038ed66a187a7.png

    总结:Selector就是UI元素和相关属性的列表,UiPath根据这些信息去匹配屏幕上已有的元素。

    注意:在一些情况下,当UiPath和目标应用程序时用不同的权限打开的,Selector可能无法正常作用。推荐总是用相同的权限打开程序。

    重点知识2:如何建立稳定的Selector

    实例:用Basic方式录制一个Sequence,在名为SelectorsTest.txt的文本文件里录入一段文字。

    分析:

    1) 查看Type Into活动的属性面板,打开Selector Editor。

    2) 关掉SelectorsTest.txt,打开五个新记事本并运行Sequence,30秒后UiPath将报错。

    * 这种提示大部分都是Selector出现问题。

    501c9436fbb9c197d803f75c13d08fd0.png

    3) 问题出在title属性上。由于指定了标题,当SelectorsTest.txt没有打开时,程序就无法正常运行。

    71c450b08820524ba0223547b3f6327c.png

    4) 考虑到你是想让这个程序在任何文本文件里都可以运行,还是只在指定的文件里运行,这可以是一个bug,也可以不是。

    5) 如果想要程序在任何文本文件里运行,只要删除title属性就可以了。

    6) 重新运行程序。虽然打开了五个记事本,但程序只会在最上层的记事本里运行。

    *SelectorEditor和UI Explorer有所不同。在Selector Editor的Edit Attributes模块里,该Selector包含的所有UI元素的相关属性都会列出来。而在UI Explorer里,只会显示选中的那个UI元素的相关属性。

    点击左下角的Openin Explorer可以在UIExplorer里查看和修改更多的UI元素和属性。你也可以在Selector Editor的Edit Selector模块里手动修改代码。

    重点知识3. 自定义Selector

    1)Full Selector和PartialSelector

    FullSelector:包含了确定该UI元素位置的所有必要信息,其中包括顶级窗口的信息。

    7b804f9551c3a314b68a5c0927224266.png

    PartialSelector:不包括顶级窗口的信息,但是嵌套在一个包含了顶级窗口信息的容器中,比如Attach Window活动,Open Application活动。

    5f1371599dcbcf534da3292fd8c2af75.png

    除了是否包含顶级窗口的信息,FullSelector和PartialSelector没有什么区别。在同一个窗口执行多个操作时建议使用Partial Selector;需要在多个窗口之间切换时建议使用Full Selector。如果可能受到其他应用程序或窗口的干扰,最好使用Partial Selector。

    *FullSelector也可以在AttachWindow或者Open Application等的容器中使用。

    *录制功能的Basic模式使用的都是Full Selector,Desktop模式使用的都是Partial Selector。

    2) 动态Selector:通配符

    * (星号):代替任意个字符。

    ? (问号):代替任意一个字符。

    实例1:如何让UiPath识别出一个名为“DailyReport - ”加上当天的日期的文本文件。

    方法:将动态的部分,在这里即日期,用*表示。

    fbfd677850f83b0333dd566330ced3eb.png
    1639f079783e499409a48bd16bcd322e.png

    实例2:首先在亚马逊首页查询书A的价格,接着用Basic模式录制下列操作:选中并清空搜索栏,输入书B的名称并查询,读取书B的价格并用Message Box显示。

    运行程序30秒钟后,将收到下面的错误信息。

    4e994f3c754e2e7268d4bfb8d9fd19fe.png

    分析:由于首先查询了书A,在录制过程中浏览器的标题包含书A的名称。但是在录制结束后,浏览器的标题已经变成了书B,因此UiPath无法识别出浏览器窗口来运行程序。

    702d7c5463ae7d2761737c614f219310.png

    方法:可以直接去掉title属性。但是更好的方法是,把书A的名称替换为通配符*。GetText活动的Selector也需要相应的修改。

    3) 动态Selector:Attach to Live Element

    如果不使用通配符的方法修改Selector,还可以使用Attach to Live Element。

    找到出错的Selector,点击Selector Editor右上角的Attach to Live Element,然后再次点击UiPath运行时没能识别出的元素,比如实例2中的搜索栏。UiPath会将之前的Selector和这一次的进行对比,用*代替其中不同的部分。

    dfca6c34468ad9d40827d7bc211ecda8.png

    4) 动态Selector:Index

    Index告诉UiPath应该选择第几个UI元素。

    实例:在记事本中录制一个更改字体的Sequence,并把它改成选择第四种字体。

    方法:录制完成后,从Selector Editor中打开UI Explorer。如果我们去掉字体名称的属性,它将会被自动替换为idx=4。

    c0bfcf2b5dde3560f422af303787a0d6.png
    3fcee327db84d2b279781938824c7724.png

    *如果在一个Selector中出现了Index属性,这是一个信号,说明现有的属性不足以让UiPath识别出目标UI元素,因此需要依靠Index属性来找到它。但是这样的Selector是不可靠的,我们应该尝试添加其他上级元素或者属性而避免使用Index。

    *应尽量避免使用大于2的Index属性,尝试添加其他的属性来确保Selector的稳定性。

    5) 动态Selector:变量

    实例:用户输入一个0-9的数字,在Windows自带的计算器中标亮这个数字。

    方法:

    • 添加一个InputDialog方法,要求用户输入0-9的数字,输出变量digit
    • 添加一个Highlight方法,然后随便指定一个计算器中的数字,这里指定0。
    • 用UIExplorer查看计算器的UI元素,找出哪一个属性与数字有关。
    887d7e584b21f1ed073fde1902b5e254.png
    08960f19ac227176dce7aa89e4335c10.png

    包含有数字的属性只有Automationid,需要保留。Name属性与数字的英文有关,它是动态的,必须去掉。稳妥起见,可以把cls='Button'属性和整个NumberPad元素去掉。最终的Selector如下图所示。

    37ff5c3c597c06c72701d558b41820be.png

    最终得到的Selector复制到Highlight活动的Selector里,然后在属性面板里把Selector里修改为。

    • 一定要在属性面板里修改,因为Selector Editor里的Selector是不带引号的。
    • 另一个思路是声明一个String型的变量,然后用Replace方法把Selector里的0替换为该变量。

    *创建更可信的Selector

    实例:

    http://rpachallenge.com网站提供了一个关于RPA的练习。在这个网站上,每点一次Submit,信息的排列顺序和位置都会改变。如何让UiPath总能定位到First Name的文本框并填入Mack的名字?

    分析:

    1) 首先使用UI Explorer分析First Name文本框的Selector,该Selector有一个id属性是唯一的。

    b2f2a25bbb6929b32ffefa324d1af8ef.png

    2) 点击网页上的Submit按钮进入下一页,新的First Name文本框的id属性值和上一个不同。这说明id属性是动态的,无法每次都定位到First Name文本框。

    686222d489745566b8de43f991f317f7.png

    3) 文本框元素里没有任何一个属性与First Name有关。但是它的上级元素有一个aaname属性提到了First Name,我们把这个元素添加到Selector里。

    4) 该元素里的css-selector属性是唯一的,但是只要网页设计稍作调整,这个属性就会发生变动,因此要把它去掉。

    12de0354ee1c7813feeacebab5a42c42.png

    5) 去掉css-selector属性后,UiPath会自动为该元素添加idx='2'属性,这说明现有的属性可能不足以确定该元素的位置。其原因是:除了css-selector属性外,该元素和它的上级元素的其他属性(aaname/ parentidid/ id)是相同的。只要把该元素的上级元素也选上,idx='2'就会消失。记得去掉新添加的元素的css-selector属性。

    600ec1a1301cbafa518205c26357c272.png

    6) 这个Selector是能用的,但是它存在很大的缺陷:一是该Selector仅能在特定的网页结构下运行;二是为Selector添加过多的上级元素会让它变得不稳定,因为上级元素只要稍有变化就会发生错误。

    *点击对号按钮可以检查当前Selector的有效性。

    7f256fbe526784b4ec4dc01f8c38d243.png

    方法:此处提供两种更稳妥的方法解决上述问题。

    1) 使用Anchor Base方法:

    在该方法的容器中,左边放锚点(anchor)活动,右边放要运行的其他活动。

    cd6eec14cb016b5dae039b2a190d96b2.png

    FindElement活动或FindImage活动可以作为锚点。Find Element活动同样通过Target里的各种属性来定位UI元素,但不同的是它会输出一个UIElement对象。稍后,我们将用这个对象创建一个更可信的Selector。

    3c387654840bf65f5003f5a68788fe04.png

    先指定网页上的FirstName标签(Label)作为锚点,标签的Selector通常非常稳定。

    b3198775ab1f905e9db335771e6ae08d.png

    在Anchor Base容器的右边,添加Type Into活动用来在文本框里输入Mack的名字。指定First Name标签右边的文本框作为TypeInto活动的目标元素,可以看到它的Selector里只有一个tag属性,并没有id等动态属性。

    AnchorBase活动的原理是UiPath将以指定的锚点作为参考,选取屏幕上离它最近的符合Selector条件(webctrl tag='INPUT')的UI元素,这样做缩小了搜索范围。

    fd4ee9985593c9c055a15f42fcd1ca85.png

    AnchorBase活动有一个非常有用的属性AnchorPosition。它的默认值是Auto,但是如果锚点相对于目标元素的位置总是固定的,就可以把它改为其他值。在本例中它不是固定的,因为有时候文本框在标签的左边,有时候在下边。

    7721b178ba02c1c1705f4cbe6369d778.png

    由于AnchorBase活动通过锚点和目标元素在屏幕上的相对位置来进行定位,因此它无法在后台运行。

    2) 使用Select Relative Selector

    打开UI Explorer,先指定First Name文本框。点击左上角工具栏里的Select Relative Element。

    9aa3756ab2a347eb7c1b96623243d6e2.png

    此时进入选取模式,选取FirstName的标签文字。这样做会在列表中添加新的关于FirstName标签的元素:webctrl和nav。nav的up属性可以导航到父元素,再从它的子元素列表里选择目标元素(...that locates the First Name label,navigates up to the parent element level and then selects the input in the listof children elements.)。同时别忘了去掉文本框的id属性。

    • nav支持的其他属性有next和prev,分别表示前往结构树的下一个或者上一个元素(...which go to the next or the previouselements in the tree respectively.)。
    1873789e8a03dcc6ba75b74731d3aa18.png

    添加一个TypeInto活动,把得到的Selector 复制到该活动的Selector属性里,大功告成。

    使用SelectRelative Selector功能,程序是可以在后台运行的,因为该功能基于应用程序的内部结构而非屏幕上的位置。

    本文转自公众号“伊路人生”

    展开全文
  • Pandas中的缺失处理

    2019-04-12 14:56:58
    这些数据不管就好了,有的数据虽然没有,但是也可以根据一些数据推算出来这个数据是多少然后给它填上,但是有的数据缺失是随机缺失的完全不知道应该怎么处理,所以呢今天我就带大家了解一下数据中的缺失以及如何对缺失...


    相信大家在处理数据的时候经常会发现有一些数据的缺失,这个时候便会很头大,因为有时候的缺失的数据是本来就没有的,这些数据不管就好了,有的数据虽然没有,但是也可以根据一些数据推算出来这个数据是多少然后给它填上,但是有的数据缺失是随机缺失的完全不知道应该怎么处理,所以呢今天我就带大家了解一下数据中的缺失值以及如何对缺失值进行处理。

    一、读取数据

    相信大家在使用python读取数据的时候会出现这种报错的情况。

    这种情况是因为文件名中有中文,遇到这种情况第一种方式就是讲文件名改为英文,或者这样处理可以。

    先使用open打开,然后赋值给变量,然后关闭掉文件,使用被赋值的变量就可以了。

    二、处理缺失值

    1、什么是缺失值

    俗话说知己知彼,百战百胜,在处理缺失值之前我们首先要了解一下什么是缺失值? 直观上理解,缺失值表示的是“缺失的数据”。可以思考一个问题:是什么原因造成的缺失值呢?其实有很多原因,实际生活中可能由于有的数据不全所以导致数据缺失,也有可能由于误操作导致数据缺失,又或者人为地造成数据缺失,但是主要的还是分为机械原因和人为原因。

    机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,比如数据存储的失败,存储器损坏,机械故障导致某段时间数据未能收集(对于定时数据采集而言)。

    人为原因是由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如,在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据

    缺失值从缺失的分布来讲可以分为完全随机缺失,随机缺失和完全非随机缺失。

    • 完全随机缺失(missing completely at random,MCAR)指的是数据的缺失是随机的,数据的缺失不依赖于任何不完全变量或完全变量。
    • 随机缺失(missing at random,MAR)指的是数据的缺失不是完全随机的,即该类数据的缺失依赖于其他完全变量。
    • 完全非随机缺失(missing not at random,MNAR)指的是数据的缺失依赖于不完全变量自身。

    缺失值从缺失值的所属属性来讲可以分为单值缺失,任意缺失和单调缺失。

    • 单值缺失:如果所有的缺失值都是同一属性,那么这种缺失成为单值缺失。
    • 任意缺失:如果缺失值属于不同的属性,称为任意缺失。
    • 单调缺失:对于时间序列类的数据,可能存在随着时间的缺失,这种缺失称为单调缺失

    在Python中缺失值被认为是None、np.nan、NaT的形式。

    原理性的东西我们就说这么多,下面我们进入代码部门,首先我们人为的造成一些数据的缺失

    然后我们生成一列英雄们的生日的数据列

    查看数据表的信息。

    2、转换数据列的类型

    这个时候我们通过info()方法发现生日列的类型是object的,需要将生日列的类型通过to_datetime()转换为日期型

    3、掩码提取空值

    首先使用isnull()或者notnull()来查看是否缺失

    Isnull()是将缺失值判断为True,非缺失值判断为False

    Notnull()将缺失值判断为False,非缺失值判断为True

    • 将有空值的行提取出来
    • 反之将非空行的数据提取出来
    1. 掩码的其他用处

    4.1、将不是地球的英雄提取出来

    • 首先将那个星球的列名改为星球
    • 然后将外星球的英雄提取出来。

      4.2、将1980年之后出生的英雄提取出来

      4.3、将1988年1月1号之前出生的英雄提取出来

      5、丢弃缺失值

    既然在数据中有缺失值了,常见的一种处理办法就是丢弃缺失值。使用 dropna 方法可以丢弃缺失值。

    user_info.dropna(axis=0,how=‘any’,thresh=None,subset=None,inplace=False)

    seriese使用dropna比较简单,对于DataFrame 来说,可以设置更多的参数。

    axis 参数用于控制行或列,跟其他不一样的是,axis=0 (默认)表示操作行,axis=1 表示操作列。

    how 参数可选的值为 any(默认) 或者 all。any 表示一行/列有任意元素为空时即丢弃,all 一行/列所有值都为空时才丢弃。subset 参数表示删除时只考虑的索引或列名。thresh参数的类型为整数,它的作用是,比如 thresh=3,会在一行/列中至少有 3 个非空值时将其保留。

    • 一列数据中只要存在一个空值就删除掉

      从结果可以看出,身高列和城市列都存在空值,这样就被删除掉了。

    • 一行数据中只要城市和性别出现空值就删除掉

      从结果可以看出,钢铁侠、索尔因为身高出现空值而被删除这一行的数据,奇异博士因为城市出现空值而被删除一行的数据,灭霸是年龄出现了空值,但是年龄这一列并未做为删除的条件所以没有被删除掉数据。

    三、填充缺失值

    除了可以丢弃缺失值外,也可以填充缺失值,最常见的是使用fillna完成填充。Fillna这个名字一看就是用来填充缺失值得嘛。

    1、固定值填充

    填充缺失值时,常见的一种方式是使用一个标量来填充。比如我们可以将缺失的年龄都填充为0。

    • 将英雄们的身高填充为0


      当然在身高列填充0显然是不规范的,咱们这里只做演示使用,大家在实际的处理数据的时候还是要跟数据结合起来在选择填充的标量。

    2、上下文填充

    除了可以使用标量来填充之外,还可以使用前一个或后一个有效值来填充。设置参数method=’pad’或method=’ffill’可以使用前一个有效值来填充。


    设置参method='bfill’或method='backfill’可以使用后一个有效值来填充。


    除了通过fillna方法来填充缺失值外,还可以通过interpolate方法来填充。默认情况下使用线性差值,可以是设置method参数来改变方式。

    3、替换缺失值

    现在大家想一想,到底什么才是缺失值呢,不要以为我前边说过的那些None、np.nan、NaT这些是缺失值,这些在Pandas中被认为是缺失值,但是呢,在我们活生生的人眼中,某些异常值也会被当成缺失值来处理。

    例如,在我们的存储的用户信息中,假定我们限定用户都是青年,出现了年龄为40的,我们就可以认为这是一个异常值。

    再比如,我们都知道性别分为男性(male)和女性(female),在记录用户性别的时候,对于未知的用户性别都记为了“unknown”,很明显,我们也可以认为“unknown”是缺失值。

    除了这些,有时会也会出现一些空白的字符串,这些也可以认为是缺失值。对于上面的这一系列问题,我们可以使用replace方法来替换缺失值。

    • 假设我们现在是一个地球流浪者收容组织,不允许外星人的存在,那么英雄现在已经存在了,打又打不过,但是又不能违反组织的规定,那怎么办呢,那就把这些惹不起的外星人定义成黑户,也就是空值,不知道他们的星球属性,睁一只眼闭一只眼。

    • 这个时候外星这个属性去掉了,但是阿斯加德和泰坦星明显不是一个地球的城市,所以我们也要将城市属性换成NaN,但是分开设置又太麻烦了,我们就可以直接将城市作为一个映射的字典给替换掉。

    • 处理完外星人的事了之后现在返回来处理咱们地球人的事,这个时候发现黑寡妇的生日是1929年,明显是一个假的出生日期,既然生日是假的年龄应该也是假的,所以我们需要将年龄更改为unknown,然后在定义为缺失值。


      除了替换特定的值以外,我们还可以使用正则表达式来替换,如将空白字符串替换为空值。

    • 将中年替换为中老年

      4、使用其他对象填充

    除了我们自己手动丢弃、填充已经替换缺失值之外,我们还可以使用其他的对象来填充。

    例如我们有两个用户年龄的series,其中一个由缺失值,另外一个没有,我们可以额将没有缺失值的series的元素传给有缺失值的。

    展开全文
  • # Convert the res_tableOE data frame to a tibble 相反,可以使用否定选择删除不需要的列。 res_tableOE %>% # 将这个tibble保存为一个名为sub_res的新变量: sub_res % arrange() 请注意,现在行是按...
  • python之数据分析

    千次阅读 2019-10-18 17:53:31
    时间种子(随机因子):无时无刻都在变化的(系统时间) 固定随机因子就可以固定随机函数的随机性 np . random . seed ( 90 ) # 时间因子90是任意数值 np . random . randint ( 0 , 100 , size = ( 3 , 5 )...
  • 能源之(Energy Star),是美国能源部和美国环保署共同推行的一项政府计划,旨在更好地保护生存环境,节约能源。 项目目标: 1.使用提供的建筑能源数据开发一个模型,该模型可以预测建筑物的能源之得分, 2.然后...
  • 七、数值型数据统计

    2021-12-11 20:29:28
    七、数值型数据统计 数值型数据描述统计概论 ...样本中的每个都是真值与误差的和,算数平均表示对真值的无偏估计。 数学表示 样本:S=[s1,s2,s3,…,sn]S = [s_1, s_2, s_3, …, s_n]S=[s1​,s2​,s3​,…
  • Python pandas模块

    千次阅读 2022-05-18 18:59:35
    ●dropna: 丢弃、删除缺失 axis :删除行还是列,{0 or "index', 1 or 'columns’}, default 0 how :如果等于any则任何为空都删除,如果等于al则所有都为空才删除。 inplace :如果为True则修改当前df,否则返回...
  • 新手小白学python(一)

    千次阅读 2020-02-01 23:23:50
    @[toc]新人上路之python入门学习 标识符和变量 标识符 标识符是指用来标某个实体的一个符号,在不同的应用环境下...变量可以改变,类型也可以改变。 python中,对变量是不需要声明的。(这是与java,c等其他语言不...
  • Spark笔记一:简介

    2019-10-10 21:23:44
    DataFrame创建:RDD转换—Spark官网提供了两种方法来实现从RDD转换得到DataFrame,第一种方法是,利用映射来推断包含特定类型对象的RDD的schema,适用对已知数据结构的RDD转换;第二种方法是,使用编程接口,构造一...
  • 让我们在行星数据上使用它,现在删除带有缺失的行: planets . dropna ( ) . describe ( ) number orbital_period mass distance year count 498.00000 498.000000 498....
  • 七、统计描述

    千次阅读 2021-12-11 19:37:00
    七、统计描述 统计描述概论 统计描述(也叫数据展示),是把一堆原始数据用指标或者图表的...样本中的每个都是真值与误差的和,算数平均表示对真值的无偏估计。 数学表示 样本:S=[s1,s2,s3,…,sn]S = [s_1, s_2,
  • 计算 DataFrame 列的不同 删除具有重复索引的行 删除某些列具有重复的行 从 DataFrame 单元格中获取 使用 DataFrame 中的条件索引获取单元格上的标量 设置 DataFrame特定单元格DataFrame 行获取...
  • 正则表达式通过使用这些速记模式来查找文本中的特定模式而起作用,因此让我们看一下其他一些常见示例: 常见的Python正则表达式模式 我们re.findall()上面使用的模式包含一个完整拼写的字符串"From:"。当我们确切地...
  • SciPyCon 2018 sklearn 教程(下)

    万次阅读 2018-10-01 19:12:25
    的三个不同。对于 n_neighbors = 2 ,数据过拟合,模型过于灵活,可以适应训练数据中的噪声。对于 n_neighbors = 20 ,模型不够灵活,无法合理建模数据中的变化。 在中间,对于 n_neighbors = 5 ,我们找到了一...
  • Python

    千次阅读 2020-12-19 12:02:53
    正确答案: 正确 补充正则表达式 1 判断题 10 分 一般 正则表达式模块re的match()方法是从字符串的开始匹配特定模式,而search()方法是在整个字符串中寻找模式,这两个方法如果匹配成功则返回match对象,匹配失败则...
  • [Spark版本升级]-- spark-2.2.0发行说明

    千次阅读 2017-07-18 10:31:45
     ] - 在特定情况下解决舞台挂起问题 [  SPARK-14489  ] - RegressionEvaluator在Spark ml中返回ALS的NaN [  SPARK-14536  ] - 当数组列包含空值(Postgresql)时,JDBCRDD中的NPE [  SPARK-14658  ]...
  • 同时,由于行存储混合着不同数据的列,行存储不容易获得一个极高的压缩比,即空间利用率不易大幅提高,尽管通过熵编码和利用列相关性能够获得一个较好的压缩比,但是复杂数据存储实现会导致解压开销增大。...
  • 「推荐度」3最高,1最低。 01 文件读写 文件的读写包括常见的txt、Excel、xml、二进制文件以及其他格式的数据文本,主要用于本地数据的读写。 1. open(name[, mode[, buffering]]) 类型:Python内置函数 描述:...
  • 基于模型的插补方法:为了填充“ rate”和“ dish_liked”列的缺失,我们使用基于模型的插补 Initially we’ve divided the original dataframe into 2 different dataframes. First dataframe containing no ...
  • 我们将通过指定要查看的DataFrame和Series(即列)来创建布尔,然后使用条件运算符仅过滤该Series中满足特定条件的响应。 这次,让我们先运行代码,然后再仔细看看它在做什么: 为确认此方法是否有效,我们可以使用...
  • df['城市'] = df['城市'].replace({'北京': 0, '上海': 1, '广州': 2, '深圳':3}) print(df) 运行结果: 二、重复、缺失及异常处理 重复 # 重复处理 import pandas as pd data = pd.DataFrame([[1, 2, 3]...
  • GEDI介绍及02B数据预处理**

    千次阅读 2022-04-18 13:35:03
    随着激光雷达技术的不断发展,载激光雷达在林分中也扮演着越来越重要的角色,尤其是GEDI数据对于林分的反演国内研究较少,本文就全球生态系统动力学调查(GEDI)的设计目的以及预处理02_B的数据做相关记录。...
  • 动手学数据分析记录

    2021-09-23 09:59:59
    对于缺失的一般思路有两种,一种是当缺失个数只是占一小部分时,将缺失部分直接删除。第二种是对缺失进行填充。填充方法可以是全局常量填充、统计数字填充、插值法、KNN填充等。 #(2) 请尝试对Age列的数据的...
  • 作者 | 弗拉德来源 | 弗拉德(公众号:fulade_me)在上一节我们学习了如何创建一个列表,在列表里面插入、删除数据等操作。本节我们学习如何管理列表。遍历列表在日常开发中,我们经常需要遍历列表的所有元素,对每个...
  • Pandas模块的核心操作对象就是序列(Series)和数据框(DataFrame)。 1、构造序列 使用如下方式实现: 通过同质的列表或元组构建。 通过字典构建。 通过Numpy中的一维数组构建。 import pandas as ...
  • 手把手教你做一个“渣”数据师,用Python代替老情人Excel-29.jpg (5.9 KB, 下载次数: 0) 2020-12-7 08:43 上传 如果想要用特定值查看整个DataFrame,可以使用drop_duplicates函数: 手把手教你做一个“渣”数据师,...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 259
精华内容 103
关键字:

dataframe删除特定值的行