读取不同数据源的数据
一、准备
1、安装第三方包
1)pymysql 、sqlalchemy
2)xlrd 、openpyxl,xlwt
3)requests
2、数据准备
1)创建一个数据库 meal
2)导入数据文件meal_order_detail1.sql
提取码:c6il
DataFrame补充
名称 | 作用 |
---|---|
df.options.display.max_columns =size | 在数据列有很多的时候,此方法可以限定返回的列数 |
df.index | 得到df的行索引 |
df.columns | 得到df的列的名称 |
df.info | 返回df的详细信息 |
df.head(size) | 返回df指定行数的数据,默认为5行 |
二、数据库的读写
方法分类
名称 | 作用 |
---|---|
read_sql_table | 只能读取某张表,不能查询,传入数据表名称和con,其他的自行添加 |
read_sql_query | 只能查询,传入sql语句和con,其他的自行添加 |
read_sql | 上面两个的集合体,看传入的是sql语句还是数据表名称 |
to_sql | 写入数据库,传入name,con,if_exists,index,index_label,dtype |
方法里的参数
read_sql里的参数大多数通用
名称 | 填入数据 |
---|---|
con | 传入创建好的数据库连接engine |
index_col | 传入字符串,传入数据表的字段作为DataFrame的行索引,可传入数组 |
columns | 传入数组或字符串,传入想得到数据的字段名称 |
chunsize | 传入int数据,以此大小创建一个迭代器,可用__next__()得出数据 |
to_sql里面的参数
名称 | 填入数据 |
---|---|
name | 要创建表的名称 |
if_exists | 传入fail,replace,append。fail表示表名若存在,则不进行操作;replace则是覆盖,append则是追加。默认为fail |
index | 接收boolean,表示是否将行索引作为数据传入数据库。默认为True |
index_label | 接收string或者sequence。代表是否引用索引名称,如果index参数为True此参数为None则使用默认名称。如果为多重索引必须引用sequence形式,默认为None |
dtype | 接收dict。代表写入的数据类型(列名为key,数据格式为values)。默认为None |
import numpy as np
import pandas as pd
from sqlalchemy import create_engine
# create_engine(string):数据库软件名称+使用库的名称://数据库账户:密码@数据库地址:数据库端口/数据库名称
engine=create_engine('mysql+pymysql://root:root@localhost:3306/meal')
detail1=pd.read_sql("meal_order_detail1",con=engine)
detail2=pd.read_sql("meal_order_detail1",con=engine,index_col='place_order_time')
detail3=pd.read_sql('meal_order_detail1',con=engine,columns=['order_id','counts', 'amounts',
'cost', 'discount_amt'])
detail4=pd.read_sql("select * from meal_order_detail1",con=engine)
detail5=pd.read_sql("select * from meal_order_detail1",con=engine,chunksize=500)
detail3.to_sql("meal2",con=engine,if_exists='replace',index=False)
三、读取文本文件
文本文件 :txt,csv,tsv
info1=pd.read_csv('dataset/meal/meal_order_info.csv',sep=',',encoding='gbk')
info1.info()
order2=pd.read_csv('dataset/meal/meal_order_info.csv',sep=",",
index_col='use_start_time',parse_dates=True,encoding='gbk')
order2.index
order3=pd.read_csv('dataset/meal/meal_order_info.csv',sep=",",
index_col='use_start_time',parse_dates=True,encoding='gbk',nrows=5)
order3.shape
orders=pd.read_csv('dataset/meal/meal_order_info.csv',sep=",",
index_col='use_start_time',parse_dates=True,encoding='gbk',chunksize=100)
for order in orders:
print(order.shape)
detail3.to_csv('dataset/meal/detail3.csv', sep='|', na_rep='NA', index=False)
sep:分隔符
encoding:编码
index_col:将某列作为行索引
parse_dates:将列数据转化为日期类型
三、读写Excel文件
sheet_name :加入excel中多个表,此参数用来指定表,传入表的名称
detail5=pd.read_excel("dataset/meal/meal_order_detail.xlsx")
detail5.loc[:5,'detail_id']
detail6=pd.read_excel("dataset/meal/meal_order_detail.xlsx",sheetname='meal_order_detail2')
detail6[:2].to_excel("dataset/meal/detail6.xlsx",sheet_name='meal_order')
多个DataFrame写入同一excel不同sheet中
官方
writer = pd.ExcelWriter('output.xlsx')
df1.to_excel(writer,'Sheet1')
df2.to_excel(writer,'Sheet2')
writer.save()
注意:sheet_name不能相同,会被覆盖的。
四、读取html数据
读取网页中table标签中的数据
1、把网页从网上抓取
2、解析数据
import requests
html=requests.get("http://kaoshi.edu.sina.com.cn/college/majorlist/")
html.encoding = html.apparent_encoding
html_data=pd.read_html(html.content,encoding='utf-8')
type(html_data)