pandas
实现SQL的in
和not in
import pandas as pd
df = pd.DataFrame({'id':['3000','4001','4002','3005']})
ids = ['4001','4002']
# 方式一
df[df.id.isin(ids)]
df[~df.id.isin(ids)]
# 方式二
df.query("id in @ids")
df.query("id not in @ids")
pandas
实现 startswith
# 方式一
df[df.id.startswith("4")]
df[~df.id.startswith("4")]
# 方式二
df.query('id.startswith("4")', engine='python')
df.query('id.startswith("4")', engine='python')
xpath
语法文本等于:/span[text()='确定']
文本不等于:/span[text()!='确定']
不包括文本:/span[not(text())]
不包括属性:/span[not(@class)]
不包括属性:/span[not(contains(@class,'expire'))]
包括属性:/span[contains(@class,'expire')]
js = "var q=document.getElementById('listdropdownUnitIdInfo-table').scrollTop=1000"
driver.execute_script(js)
上面的js脚本是,找到id为listdropdownUnitIdInfo-table
的元素,向下滚动1000个像素。可用于不规则的下拉选择框。
driver.execute_script('document.querySelector("#mini-27 > span > input").click()')
此js脚本是,根据select定位找到的元素,点击一下。
driver.execute_script("dat=document.getElementById('train_date'); dat.removeAttribute('readonly')")
driver.execute_script("document.getElementById('train_date').value='2020-10-01'")
此外还可以移除属性和修改属性。
from selenium.webdriver.support.select import Select
s = driver.find_element_by_xpath('//li[@class="select"]/select')
Select(s).select_by_value('100')
先将select的元素定位,注意:一定要定位到select。然后使用**Select().select_by_value(‘100’)**选择元素。
xpath
/js
/select
定位元素F12进入开发者模式,在chrome/FireFox中,点击想要定位的元素,右键复制,点击想要的语法,即可。
import time
day = int(time.strftime("%d", time.localtime())) # 日
month = int(time.strftime("%m", time.localtime())) #月
year = int(time.strftime("%Y", time.localtime())) # 年
有关于日期的代码,一定要注意跨月/年的日期,多考虑一点,多测试
xlwings
保存数据app = xw.App(visible=False, add_book=False)
wb = app.books.open(文件路径)
sheet = wb.sheets[工作薄名]
sheet.range("a2").options(index=False, header=False).value = df
# df是一个DataFrame格式的数据
wb.save()
wb.close()
app.quit()
c = [[a[_], b[_]] for _ in range(len(qgzx))]
list(zip(a,b))
# [(1, 4), (2, 5), (3, 6)]
一般的筛选只需要,s[s[0] == 1]
,但是当需要筛选的对象有多个时,就有点麻烦,可以将每一个元素都进行一次筛选。也可以
s[list(map(lambda x: x not in list, s[0]))]
按行加,将数据纵向连接,使用pd.concat([])
时,注意列名对应,需要时,可以将列名修改为想要的名字和顺序。
# 修改列名
s1.columns = [0, 1, 2, 3, 4, 5, 6, 7]
# 重新排序
ss = ss.reindex(columns=[0, 1, 2, 3, 4, 5, 6])
s = pd.concat([s1, s2])
按列加,将数据横向连接,使用pd.merge()
时,需要确定按照那一列进行,对应连接。连接参数有on
、left_on
、right_on
、left_index
、right_index
、left_index
、right_index
等等。
# 按照索引连接
pd.merge(s4, s5, right_index=True, left_index=True)