Python使用总结
配置类
配置jupyter notebook
配置远程访问
1.生成配置文件
运行–》输入一下代码
$jupyter notebook --generate-config
#会在home目录下生成一个配置文件夹,.jupyter
2.使用ipython生成密文
from notebook.auth import passwd
password()
Enter password:###输入密码
Verify password:###再次输入密码
3.找到/jupyter_notebook_config.py文件
4.修改配置
c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #随便指定一个端口
爬虫类
关于selenium与webdriver
引用的库
import selenium
from selenium import webdriver
引用webdriver是模拟一个浏览器,不管是IE,Chrome,Fixfox都需要本机安装的浏览器对应的驱动器,
谷歌浏览器要求下载的驱动器与本机安装的谷歌浏览器版本一致
IE驱动器最好下载32位的
IE浏览器驱动器下载地址
谷歌浏览器驱动器下载地址1
谷歌浏览器驱动器下载地址2
可以将.exe文件放在python的安装目录下
注:装python环境时,已经将python的安装目录添加到系统环境变量Path下面了
IE浏览器注意事项
IE浏览器中的保护模式必须设置为一致,例如,都设置为不启用保护模式
设置地址:IE—》设置—》Internet选项—》安全
ie浏览器的缩放改为100%
地址:IE–》设置–》缩放
实例化浏览器
###IE
driver = webdriver.Ie("IEDriverserver.exe")
###如果已经把.exe文件放入python安装文件下
driver = webdriver.Ie()
###Chrome
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])###此选项可以禁用显示 "DevTools on ws..."
driver=webdriver.Chrome(executable_path="chromedriver.exe",chrome_options=options)
webdriver常用的方法
driver.get("http://www.baidu.com")#打开百度网页
driver.refresh()###刷新当前标签页
driver.close()##关闭当前标签页
driver.exit()###退出所有浏览器
driver.quit()###关闭浏览器全部标签页
webdriver.find_element_by_id("te").send_keys("test")#查找id=te的文本框并输入值"test"
driver.find_element_by_xpath("").send_keys("")#使用xpath查找元素
xpath详解
XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的搜索。所以在做爬虫时完全可以使用 XPath 做相应的信息抽取。
Xpath官方文档
W3sc教程
首先要安装lxml :
pip install lxml
常用规则
表达式 | 描述 |
---|---|
节点名称 | 选择所有此节点下的内容,例如:div |
/ | right-aligned 选择当前节点下的内容,例如:/div |
// | 选择当前节点下的内容,本质与/相同,例如://div |
. | 选取当前节点,例如:./div |
… | 选取当前节点的父节点 |
@ | 选取属性,例如://div[@id=“a”],选取所有名称为div的节点下属性id的值为a的内容 |
* | 选择所有值,例如://div/*,选择div下的所有值 |
运算符
运算符 | 描述 | 实例 | 返回值 |
---|---|---|---|
| | 计算两个节点集 | //book|//cd | 返回所有拥有 book 和 cd 元素的节点集 |
+ | 加法 | 6 + 4 | 10 |
- | 减法 | 6 - 4 | 2 |
* | 乘法 | 6 * 4 | 24 |
div | 除法 | 8 div 4 | 2 |
= | 等于 | price=9.80 | 如果 price 是 9.80,则返回 true。如果 price 是 9.90,则返回 false。 |
!= | 不等于 | price!=9.80 | 如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。 |
< | 小于 | price<9.80 | 如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。 |
<= | 小于或等于 | price<=9.80 | 如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。 |
> | 大于 | price>9.80 | 如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。 |
>= | 大于或等于 | price>=9.80 | 如果 price 是 9.90,则返回 true。如果 price 是 9.70,则返回 false。 |
or | 或 | price=9.80 or price=9.70 | 如果 price 是 9.80,则返回 true。如果 price 是 9.50,则返回 false。 |
and | 与 | price>9.00 and price<9.90 | 如果 price 是 9.80,则返回 true。如果 price 是 8.50,则返回 false。 |
mod | 计算除法的余数 | 5 mod 2 | 1 |
driver.find_element_by_id("in").click() #查找id=te的按钮并点击
driver.switch_to.parent_frame()#回到最开始的框架结构
driver.page_source ###获取当前页面内容
driver.get_cookies()###获取当前页面的cookie值
BeautifulSoup
from bs4 import BeautifulSoup
BeautifulSoup(driver.page_source, 'html.parser')
BeautifulSoup是一个模块,该模块用于格式化Html或者XML字符串
官方文档
'''
<a name="test" class="c" id="a3"> 测试 </a>
'''
soup.get_text()###获取所有文本内容,返回,测试
soup.a.string ###返回,测试
soup.a ###得到所有<a>标签的内容,返回<a name="test" class="c" > 测试 </a>
soup.a.name###得到<a>标签的name属性,返回,test
soup.a["class"]###得到<a>标签的class属性,返回,C
soup.find(id="a3")###得到id=a3的内容,返回,<a name="test" class="c" id="a3"> 测试 </a>
soup.find_all('a')###得到所有标签为a的内容
Requests
requests库是一个常用的用于http请求的模块,它使用python语言编写,可以方便的对网页进行爬取,是学习python爬虫的较好的http请求模块。
官方文档
安装
pip install requests
使用
###自定义一个headers,具体以爬取网站为准
headers ={
"Accept":"application/json, text/javascript",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
#"Content-Type":"application/x-www-form-urlencoded",
#"Content-Type":"application/json",
"Accept-Encoding":"gzip, deflate, br",
"Accept-Language":"zh-CN,zh;q=0.9",
"Cookie":"cookie值来自于要爬取网站的规则或者使用driver.get_cookies()获取"
}
GET请求
requests.get("请求地址",verify = False,headers=headers,allow_redirects=False)
POST请求
post_param={'key':'value'}##json字符串/请求参数
requests.post("请求地址",data=post_param,verify = False,headers=headers, allow_redirects=False)
allow_redirects 重定向请求
默认情况下,除了 HEAD, Requests 会自动处理所有重定向。
可以使用响应对象的 history 方法来追踪重定向。
Response.history 是一个 Response 对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。
如果你使用的是GET、OPTIONS、POST、PUT、PATCH 或者 DELETE,那么你可以通过 allow_redirects 参数禁用重定向处理:
requests.post("请求地址", allow_redirects=False)
如果你使用了 HEAD,你也可以启用重定向:
requests.head("请求地址",allow_redirects=True)
verfiy
为了避免ssl认证,可以将verify=False, 但是这么设置会带来一个问题,日志中会有大量的warning信息, 如:
requests.post("请求地址",data=post_param,verify = False,headers=headers, allow_redirects=False)
如果想把这些报错信息去掉,只需要在请求的地方加上requests.packages.urllib3.disable_warnings()
响应状态码
r = requests.get('http://httpbin.org/get')
r.status_code
### 返回:200
1xx(临时响应)
2xx (成功)
3xx (重定向)
4xx(请求错误)
5xx(服务器错误)
代码 | 说明 |
---|---|
100 | (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 |
101 | (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。 |
200 | (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 |
201 | (已创建) 请求成功并且服务器创建了新的资源。 |
202 | (已接受) 服务器已接受请求,但尚未处理。 |
203 | (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 |
204 | (无内容) 服务器成功处理了请求,但没有返回任何内容。 |
205 | (重置内容) 服务器成功处理了请求,但没有返回任何内容。 |
206 | (部分内容) 服务器成功处理了部分 GET 请求。 |
207 | (多状态)代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。 |
208 | (已报告)DAV绑定的成员已经在(多状态)响应之前的部分被列举,且未被再次包含。 |
226 | (IM Used)服务器已经满足了对资源的请求,对实体请求的一个或多个实体操作的结果表示。 |
300 | (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 |
301 | (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 |
302 | (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
303 | (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 |
304 | (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 |
305 | (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。 |
307 | (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
308 | (请求重复)请求和所有将来的请求应该使用另一个URI重复。 307和308重复302和301的行为,但不允许HTTP方法更改。 例如,将表单提交给永久重定向的资源可能会顺利进行。 |
400 | (错误请求) 服务器不理解请求的语法。 |
401 | (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 |
403 | (禁止) 服务器拒绝请求。 |
404 | (未找到) 服务器找不到请求的网页。 |
405 | (方法禁用) 禁用请求中指定的方法。 |
406 | (不接受) 无法使用请求的内容特性响应请求的网页。 |
407 | (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。 |
408 | (请求超时) 服务器等候请求时发生超时。 |
409 | (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。 |
410 | (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。 |
411 | (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。 |
412 | (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。 |
413 | (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。 |
414 | (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。 |
415 | (不支持的媒体类型) 请求的格式不受请求页面的支持。 |
416 | (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。 |
417 | (未满足期望值) 服务器未满足”期望”请求标头字段的要求。 |
418 | (彩蛋)本操作码是在1998年作为IETF的传统愚人节笑话, 在RFC 2324超文本咖啡壶控制协议’中定义的,并不需要在真实的HTTP服务器中定义。当一个控制茶壶的HTCPCP收到BREW或POST指令要求其煮咖啡时应当回传此错误。这个HTTP状态码在某些网站(包括Google.com)与项目(如Node.js、ASP.NET和Go语言)中用作彩蛋 |
420 | (特定限速)Twitter Search与Trends API在客户端被限速的情况下返回。 |
421 | (无法响应)该请求针对的是无法产生响应的服务器(例如因为连接重用)。 |
422 | (语义错误)请求格式正确,但是由于含有语义错误,无法响应 |
423 | (锁定)当前资源被锁定。 |
424 | (依赖请求失败)由于之前的某个请求发生的错误,导致当前请求失败,例如PROPPATCH。 |
425 | (无序连接)在WebDAV Advanced Collections Protocol中定义,但Web Distributed Authoring and Versioning (WebDAV) Ordered Collections Protocol中并不存在 |
426 | (请求升级)客户端应当切换到TLS/1.0,并在HTTP/1.1 Upgrade header中给出。 |
428 | (先决条件缺失)原服务器要求该请求满足一定条件。这是为了防止“‘未更新’问题,即客户端读取(GET)一个资源的状态,更改它,并将它写(PUT)回服务器,但这期间第三方已经在服务器上更改了该资源的状态,因此导致了冲突。” |
429 | (请求数量过多)用户在给定的时间内发送了太多的请求。旨在用于网络限速。 |
431 | (请求头某一个或者多个字段过大)服务器不愿处理请求,因为一个或多个头字段过大。 |
444 | (无响应)Nginx上HTTP服务器扩展。服务器不向客户端返回任何信息,并关闭连接(有助于阻止恶意软件)。 |
450 | (被Windows家长控制系统阻止)这是一个由Windows家庭控制(Microsoft)HTTP阻止的450状态代码的示例,用于信息和测试。 |
451 | (由于法律原因无法使用)主条目:HTTP 451 该访问因法律的要求而被拒绝,由IETF在2015核准后新增加。 |
494 | (请求头过大)在错误代码431提出之前Nginx上使用的扩展HTTP代码。 |
500 | (服务器内部错误) 服务器遇到错误,无法完成请求。 |
501 | (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。 |
502 | (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。 |
503 | (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。 |
504 | (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。 |
505 | (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。 |
506 | (代表服务器存在内部配置错误)由《透明内容协商协议》(RFC 2295)扩展,代表服务器存在内部配置错误,[64]被请求的协商变元资源被配置为在透明内容协商中使用自己,因此在一个协商处理中不是一个合适的重点。 |
507 | (存储空间不足)服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。 |
508 | (死循环)服务器在处理请求时陷入死循环。 (可代替 208状态码) |
510 | (获取资源所需要的策略并没有没满足)获取资源所需要的策略并没有被满足。 |
511 | (要求网络认证)客户端需要进行身份验证才能获得网络访问权限,旨在限制用户群访问特定网络。(例如连接WiFi热点时的强制网络门户) |
返回内容
Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。
请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 r.text 之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它:
>>> r.encoding
'utf-8'
>>> r.encoding = 'ISO-8859-1'
二进制响应内容
可以用于下载图片
r.content()
####如果创建图片
from PIL import Image
from io import BytesIO
i = Image.open(BytesIO(r.content))
JSON响应内容
用于得到json字符
Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据:
r.json()
原始响应内容
r.raw()
r.raw.read(10)###读取值
###如果要下载文件,请设置stream=true,并且使用get方法
r = requests.get('https://api.github.com/events', stream=True)
####下载
with open("文件保存位置", "wb") as f:
for chunk in r.iter_content(1024000):
#print (chunk)
if chunk:
f.write(chunk)
Pandas
Pandas 是基于 BSD 许可的开源支持库,为 Python 提供了高性能、易使用的数据结构与数据分析工具。
Pandas中文文档
DataFrame
1、DataFrame是一种数据框结构,相当于是一个矩阵形式,单元格可以存放数值、字符串等,这和excel表很像;
2、DataFrame是有 行(index)和 列(columns)可以设置的;
from pandas import DataFrame
创建
####方式一
df=pd.DataFrame()
df.columns=[u'col1',u'col2',u'col3']
### 方式二,list对象
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
### 方式三,字典对象
d=['a','b','c']
df=pd.DataFrame(data=[d],columns=(['col1','col2','col3']))
修改
####修改列名
df=df.rename(columns={'原列名':'新列名'})
###重置索引
df=df.reindex(axis='index')
###追加列,并设置默认值
df=df.assign(l="value")
删除
df=df.drop("列名")
df=df.drop([列的索引值])
筛选
####排除列1为空的情况
df=df[~df[u'列1'].isnull()]
####得到日期2020-08-12的销售收入与销售数量
sale,count = df.loc[(df.tdate=='2020-08-12'),(u'销售收入',u'销售数量')].sum()
####选取门店编号在1001,1002中的门店编号,门店名称列
df[['门店编号','门店名称']][df['门店编号'].isin(['1001','1002'])]
#####筛选期初数量大于0或者当前数量大于0的数据
df[(df['期初数量']>0) | df['当前数量']>0]
合并,连接
#######复制,合并,追加
frame_body=[]
order_details=[]
order_detail_body=df()
frame_body.append(order_details.copy())###追加
order_detail_body = pd.concat(frame_body)####合并
######左、右、内、全连接,类似于SQL中的LEFT JOIN、RIGHT JOIN、OUTER JOIN、INNER JOIN
pd.merge(dfA, dfB,how='left', on=['dfA与dfB相同的列'])
pd.merge(dfA, dfB,how='left', left_on=['dfA列'],right_on=['dfB列'])
pd.merge(dfA, dfB,how='right', on=['dfA与dfB相同的列'])
pd.merge(dfA, dfB,how='outer', on=['dfA与dfB相同的列'])
pd.merge(dfA, dfB,how='inner', on=['dfA与dfB相同的列'])
pd.merge方法
pd.merge(left, right, how=‘inner’, on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=(’_x’, ‘_y’), copy=True, indicator=False,
validate=None)
参数如下:
参数 | 值 |
---|---|
left | 拼接的左侧DataFrame对象 |
right | 拼接的右侧DataFrame对象 |
on | 要加入的列或索引级别名称。 必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。 |
left_on | 左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。 |
right_on | 左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。 |
left_index | 如果为True,则使用左侧DataFrame中的索引(行标签)作为其连接键。 对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。 |
right_index | 与left_index功能相似。 |
how | One of ‘left’, ‘right’, ‘outer’, ‘inner’. 默认inner。inner是取交集,outer取并集。比如left:[‘A’,‘B’,‘C’];right[’'A,‘C’,‘D’];inner取交集的话,left中出现的A会和right中出现的买一个A进行匹配拼接,如果没有是B,在right中没有匹配到,则会丢失。'outer’取并集,出现的A会进行一一匹配,没有同时出现的会将缺失的部分添加缺失值。 |
sort | 按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能。 |
suffixes | 用于重叠列的字符串后缀元组。 默认为(‘x’,’ y’)。 |
copy | 始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。 |
indicator | 将一列添加到名为_merge的输出DataFrame,其中包含有关每行源的信息。 _merge是分类类型,并且对于其合并键仅出现在“左”DataFrame中的观察值,取得值为left_only,对于其合并键仅出现在“右”DataFrame中的观察值为right_only,并且如果在两者中都找到观察点的合并键,则为left_only。 |
DataFrame.to_sql()
将数据写入数据库
DataFrame.to_sql(name, con, flavor=None, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)
参数 | 值 |
---|---|
name | string,数据库表名 |
con | SQLAlchemy引擎或DBAPI2连接(旧模式) 使用SQLAlchemy可以使用该库支持的任何数据库。如果是DBAPI2对象,则仅支持sqlite3。 |
flavor | ‘sqlite’, 默认值None,不推荐使用: 此参数将在将来的版本中删除,因为如果未安装SQLAlchemy,则“ sqlite”是唯一受支持的选项。 |
schema | string, 默认值 None,指定schema (如果数据库支持). 如果是None值, 则使用默认的schema. |
if_exists | {‘fail’, ‘replace’, ‘append’}, 默认值‘fail’ fail:如果表存在,不做任何操作 replace:如果表存在,则删除该表,再添加数据 append |
index | 布尔值,默认值为True,将DataFrame索引写为列。 |
index_label | string or 序列, 默认值None, 索引列的列标签。如果给出None(默认)并且 index为True,则使用索引名。 如果DataFrame使用MultiIndex,则应给出一个序列。 |
chunksize | int, 默认值为None, 如果不是None,那么将一次批量写入此大小的行。如果为None,则将立即写入所有行。 |
dtype | 列名称为sql类型的字典,默认为None 可选指定列的数据类型。SQL类型应该是SQLAlchemy类型,或者是sqlite3后备连接的字符串。 |
示例
df.to_sql('table_name',con,dtype={'col1':VARCHAR(20)},if_exits="append",chunksize=1000)
DataFrame.to_excel
将DataFrame对象数据存入excel文件中
要将单个对象写入Excel .xlsx文件,仅需要指定目标文件名。要写入多张页签,必须使用目标文件名创建一个ExcelWriter对象,并在文件中指定要写入的页签名称。
通过指定唯一的sheet_name可以写入多张页签。将所有数据写入文件后,必须保存更改。
请注意,使用已经存在的文件名创建ExcelWriter对象将导致现有文件的内容被删除。
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)
参数 | 描述 |
---|---|
excel_writer | str or ExcelWriter object,文件路径或者已存在的ExcelWriter对象,例如,“a.xlsx” |
sheet_name | str, default ‘Sheet1’,页签名称 |
na_rep | str,默认’’,数据缺失时的默认显示 |
float_format | str,可选,浮点数字的显示格式,例如 float_format="%.2f"将格式0.1234设置为0.12 |
columns | 序列或str列表,可选,写入页签的列头名称 |
header | 布尔或str列表,默认为True,写出列名。如果给出了字符串列表,则假定它是列名的别名。 |
index | 布尔值,默认为True,写行名(索引)。 |
JSON
####将JSON字符串转换为pandas对象
pandas.read_json()
pandas.json_normalize()####将半结构化JSON数据规范化为一个平面表。
data = [{'id': 1, 'name': {'first': 'Coleen', 'last': 'Volk'}},
{'name': {'given': 'Mose', 'family': 'Regner'}},
{'id': 2, 'name': 'Faye Raker'}]
pandas.json_normalize(data)
# id name name.family name.first name.given name.last
#0 1.0 NaN NaN Coleen NaN Volk
#1 NaN NaN Regner NaN Mose NaN
#2 2.0 Faye Raker NaN NaN NaN NaN
json.loads()与json.dumps()
import json
json.loads()###将json格式的数据转换为字典
json.dumps()###将字典转换为json格式的数据
pandas.read
pandas.read_sql()
从数据库查询数据并返回DataFrame类型值
与read_sql_table和read_sql_query相同
pandas.read_sql(
sql,
con,
index_col=None,
coerce_float=True,
params=None,
parse_dates=None,
columns=None,
chunksize=None)
参数 | 描述 |
---|---|
sql | 数据查询sql语句,例如:select * from test |
con | 数据库连接对象 |
index_col | 索引列 |
coerce_float | 将数字形式的字符串直接以float型读入 |
params | 使用list 或者 dict或者tuple传递值,传递给执行方法的参数列表。用于传递参数的语法取决于数据库驱动程序。查看数据库驱动程序文档,以了解PEP 249的paramstyle中所描述的五种语法样式中的哪一种受支持。例如。对于psycopg2,使用%(name)s,因此请使用params = {‘name’:‘value’}。 |
parse_dates | 某一列日期型字符串转换为datetime型数据,与pd.to_datetime函数功能类似。可以直接提供需要转换的列名以默认的日期形式转换,也可以用字典的格式提供列名和转换的日期格式,比如{column_name: format string}(format string:"%Y:%m:%H:%M:%S") |
columns | 选取返回的列 |
chunksize | 如果提供了一个整数值,那么就会返回一个generator,每次输出的行数就是提供的值的大小。 |
PEP 249的paramstyle:
创建数据库连接
import sqlalchemy
import pyodbc
from sqlalchemy.types import *
from sqlalchemy import create_engine
engine=sqlalchemy.create_engine(
'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名',###"mssql+pyodbc://用户名:密码@数据源名称"此语句为连接SQLServer数据库
echo=True, # 设置为True,则输出sql语句
pool_size=5, # 数据库连接池初始化的容量
max_overflow=10, # 连接池最大溢出容量,该容量+初始容量=最大容量。超出会堵塞等待,等待时间为timeout参数值默认30
pool_recycle=7200 # 重连周期
)
配置数据源
1.运行–》control.exe–》管理工具
2.选择数据源—》系统DSN–>添加–>SQL Server
3.输入名称,描述,服务器地址
4.输入数据库登录名和密码
5.更改默认的数据库
6.完成
7.测试连接
8.配置成功!!!
pandas.read_excel()
读取excel文件并返回一个DataFrame
官方文档
pandas.read_excel(io, sheet_name=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, usecols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)
常用的参数io,sheet_name
参数 | 描述 |
---|---|
io | string,读取的excel文件的地址,例如:"./a.xlsx" |
sheet_name | string, int, mixed list of strings/ints, or None, default 0,文件的页签名称或者索引,索引从0开始,默认值为“Sheet1”或者0 |
header | int, list of ints, default 0,指定作为列名的行,默认0,即取第一行的值为列名。数据为列名行以下的数据;若数据不含列名,则设定 header = None。 |
converters | dict, default None,将查询值转换为指定的类型 |
示例:
stockHead=pd.read_excel("a.xls",'Sheet1',converters={'序号':str})
pandas.read_json()
将json字符串转换为pandas对象
官方文档
pandas.read_json(path_or_buf=None, orient=None, typ='frame', dtype=True, convert_axes=True, convert_dates=True, keep_default_dates=True, numpy=False, precise_float=False, date_unit=None, encoding=None, lines=False, chunksize=None, compression='infer')
参数 | 描述 |
---|---|
path_or_buf | a valid JSON string or file-like, default: None,json字符串或者json文件,该字符串可以是URL。 有效的URL方案包括http,ftp,s3和file。 对于文件URL,需要一个host。例如,本地文件可能是file://localhost/path/to/table.json |
orient | string,预期的JSON字符串格式的指示。可以to_json()使用相应的orient值来生成兼容的JSON字符串。 值如下: ‘split’:dict格式为 {index -> [index], columns -> [columns], data -> [values]} ‘records’:list 格式为 [{column -> value}, … , {column -> value}] ‘index’:dict格式为 {index -> {column -> value}} ‘columns’:dict格式为 {column -> {index -> value}}‘values’ :仅是值数组 以上值和默认值取决于type参数的值。 当,type == 'series’ orients的值为 {‘split’,‘records’,‘index’} 默认值是 'index’ 当orient的值为‘index’时,series的索引必须是唯一的。 当,type == 'frame’ orients的值为 {‘split’,‘records’,‘index’, ‘columns’,‘values’} 默认值是 'columns’ 当orients的值为 ‘index’和’columns’时,DataFrame的索引必须是唯一的 当orients的值是’index’,'columns’和’records’时,DataFrame的列必须是唯一的 |
pandas.read_html()
读取当前页面的table标签内容并返回一个包含DataFrame对象的列表
官方文档
pandas.read_html(io, match='.+', flavor=None, header=None, index_col=None, skiprows=None, attrs=None, parse_dates=False, tupleize_cols=False, thousands=', ', encoding=None, decimal='.', converters=None, na_values=None, keep_default_na=True)
参数:
io:str或类似文件
URL,类似文件的对象或包含HTML的原始字符串。请注意,lxml仅接受http,ftp和文件url协 议。如果您有一个以开头的URL,则’https’可以尝试删除’s’。
match:str或编译的正则表达式,可选
将返回包含与该正则表达式或字符串匹配的文本的表集。除非HTML非常简单,否则您可能需要在此处传递非空字符串。
默认为“.+”(匹配任何非空字符串)。
默认值将返回页面上包含的所有表。此值转换为正则表达式,以便Beautiful Soup和lxml之间具有一致的行为。