Chapter 5 适应不同类型的数据源
一、从CSV文件中读取文件
1、缺少表头时
import numpy as np
import pandas as pd
df1 = pd.read_csv(r'test1.csv',header=None) #如果不加None,则第一行数据就会被错误的当做表头
##添加表头
df1 = pd.read_csv(r'test1.csv',header=None,names=['aa','bb','cc']) ##给无表头的文件添加模板
2、读取不以逗号为分隔符的csv文件
df1 = pd.read_csv(r'test2.csv',sep=';') #test2文件是以;为分隔符的,如果是以其他符号为分隔符,则sep='其他符号'
3、重置csv的表头
##当源文件有表头,但我们想设置新的表头,需要用到header=0,然后再赋予新的names
df1 = pd.read_csv(r'test3.csv',header=0,names=['A','B','C'])
4、读取csv文件时跳过初始行和页脚
##跳过表头,skiprows=n
df1 = pd.read_csv(r'test4.csv',skiprows=2) #前两行为源文件表格说明,因此需要跳过,跳过后读取第一行为表头,后面均为正常表格数据。
##跳过页脚,skipfooter=n
df1=pd.read_csv(r'test4.csv',skiprows=2,skipfooter=1,engine='python') #跳过页脚需要用skipfooter,engine='python'共同启用。
##读取前N行,nrows
pd.read_csv(r'test4.csv',nrows=2)##只读取前2行
##默认情况下,read_csv函数会忽略空白行,但有时候希望将其读入为NaN,这样可以计算原始文件中有多少这样的空白行,在某些情况下,这是默认数据流质量和一致性的指标。为此设置skip_blank_lines选项。
pd.read_csv(r'test5.csv',skip_blank_lines=False)##不跳过空白行
5、从Zip中读取csv
##pandas允许从压缩文件中(如:.zip、.gz、.bz2、.xz文件)读取文件,但唯一的要求就是目标文件csv是压缩文件中唯一的文件
#(这不ok)
pd.read_csv(r'test4.zip')
二、从Excel中读取数据
df2 = pd.read_excel('data.xlsx',sheet_name='参数')
##如果excel中有多个个工作表,但是将sheet_name参数设置为None,那么read_excel将返回一个有序的字典。
df3 = pd.read_excel('data2.xlsx',sheet_name=None)
df3.keys()
##odict_keys('资产','还本','参数')
三、从文本中读取数据
df3 = pd.read_table('table_ex.txt')
df3 = pd.read_table('table_ex.txt',sep=',')
四、从非文本源中读取数据
1、从url中读取数据
url = 'https://www.fdic.gov/resources/resolutions/bank-failures/failed-bank-list/'
list_of_url = pd.read_html(url)
df14 = list_of_url [0]
df14.head()
2、从json文件中读取
df16 = pd.read_json('movies.json')
df16.head()
3、从pdf中读取表格文件
from tabula import read_pdf ##pip install tabula-py
df18 = read_pdf('Housing_data.pdf',pages=[1],pandas_options={'header':None})##代码出来的结果为list
##给从pdf中提取出来的数据,加上标题
names = ['A','B','C','D']
df18 = read_pdf('Housing_data.pdf',pages=[1],pandas_options={'header':None,'names':names[:10})
##################################################
接下来是爬虫的相关部分
五、Beautifulsoup 4 和网页解析简介
bs4用于从HTML或者XML文档获取数据,它提供一种友好的、标准化的、符合语言习惯的方式来浏览和查询文档。他不包括解析器,但支持不同的解析器。
HTNL结构内容讲解
1、任何以<开始并以>结尾的都属于元素,有些元素有一个开始元素和一个结束元素,其中结束元素以“</”开头,并且与开始元素同名,例如<p>
和</p>
,他们可以包含任意数量的其他类型的元素;有些元素没有结束部分,例如<br/>
,他们不能包含任何内容。
2、元素可以具有属性,这些属性可以用来修改元素的默认行为。
比如<a>
元素需要一个href属性告诉浏览器单击该特定<a>
时应该导航到哪一个网站。
例如:<a href=“http://cnn.com”>
树状结构,层层提取~~~
3、使用BeautifulSoup读取html文件
from bs4 import BeautifulSoup
with open('test.html','r') as fd:
soup = BeautifulSoup(fd)
print(soup.prettify())
print(soup.contents) ##成员变量
##查看标签中的内容,使用“.”即可
print(soup.p)##查看标签为p的内容
##如果有很多p标签,则使用find_all
all_ps = soup.find_all('p')
print (all_ps)
##将网页中的表格的header和body分开提取出来再组合在一起。