文章目录
一、打开
利用pandas读取文件主要用到的函数是read_xxx(),读取后数据结构为dataframe。
1、打开excel文件
pd.read_excel()可以用来读取excel文件
import pandas as pd
df=pd.read_excel(r'xxx.xls')# 文件名或文件路径
df
就是那么简单,当然还有参数需要学习一下
*sheet_name:指定文件中的表名
usecols:读取表格中哪几列
nrows:使用哪一列作为行索引
index_col:使用哪一列作为行索引
*header: 哪一行设置为列索引,默认是第一行,即header = 0,以header = 1, 以第二行为列索引
date_parser:解析日期的函数
*encoding: 默认是utf-8,还可以是gbk
nrows: 读取多少行数据
skiprows: 跳过前几行读取文件,默认从0开始
*engine: 默认是C,如文件路径存在中文时,engine= "python"
names: 列索引
那么开始实战
一个表有两个sheet表一与表二
用pandas最简单方式打开
在不指定sheet_name的情况下默认是第一个sheet,如果打开第二个sheet,
df=pd.read_excel(r'工作表.xlsx',sheet_name='表2'#或者sheet_name=1)
df
第二个sheet是存在合并单元格,用pandas打开的时候会自动默认拆分,如图
题目1:打开第二个sheet,从第二行开始读取,读取表格中前两列,并自定义列名,列索引为’id’
df=pd.read_excel(r'工作表.xlsx',sheet_name='表2'#sheet_name=1
,skiprows = 2#第二行开始读取
,usecols = [0,1,2]#只获取第一、二、三列
,header=None#无列名
,names = ["用户id","姓名","性别"]#添加列名
)
df
题目2:转化时间列,读取前五行
df=pd.read_excel(r'工作表.xlsx',parse_dates=['出生年月'],nrows=5)
df
2、打开csv文件
csv文件是以逗号为分隔符的文件,读取参数与excel基本类似,与excel的读取不一样的地方在于如遇到中文路径必须得设置engine参数;
文件为gbk格式的csv,若不设置encoding参数,会报错,并且文件路径带有中文,需要设置engine参数,不然也会报错;
df = pd.read_csv(r"D:\下载\示例csv.csv",encoding = "gbk",engine = "python")
encoding默认是utf-8格式,根据需要还可能是gbk,示例就是gbk格式;
engine指定读取引擎,默认是c语言,如有路径有中文,需设置为python,python引擎更为全面;
csv基本与Excel用法相似,不再赘述
3、打开txt文件
在读取 txt 文件时,经常遇到分隔符非空格的情况, read_table 有一个分割参数 sep ,它使得用户可以自定义分割符号,进行 txt 数据的读取。例如,下面的读取的表以 |||| 为分割
pd.read_table('data/my_table_special_sep.txt',
sep=' \|\|\|\| ', engine='python')
4、打开数据库sql文件
打开sql文件有很多种方法
以pymysql为例:
import pymysql
eng=pymysql.connect(host='111.222.33.44',user='root',password'1234',db='test',charset='utf-8')
sql='select * from 表名'
df=pd.read_sql(sql,eng)
host是数据库地址,user是用户名,password是密码,db是数据库名,charset是数据库编码。
以sqlalchemy为例
import sqlalchemy
conn = create_engine('mysql+pymysql://root:1234@11.22.333.444:3306/test')
sql = 'select * from 表名'
df = pd.read_sql(sql,conn )
5、read_clipboard()
将剪贴簿内容转换成DataFrame
步骤:复制其他来源的表格,执行pd.read_clipboard()
有兴趣可以试一下
6、read_html()
快速获取在html中页面中Table型表格抓取的数据
table类型的表格网页结构如下:
几种标签含义:
<table> : 定义表格
<thead> : 定义表格的页眉
<tbody> : 定义表格的主体
<tr> : 定义表格的行
<th> : 定义表格的表头
<td> : 定义表格单元*
以财富五百强为例:
df=pd.read_html('https://www.fortunechina.com/fortune500/c/2018-07/19/content_311046.htm')
#财富五百强名单
df
合并demo文件夹下所有文件
import os
path = 'demo/'
filesnames = os.listdir(path)#获取该文件夹下的所有文件并且以列表形式
df_list = []
for filename in filesnames:
df_list.append(pd.read_excel(path + filename))
#把循环读取出来的文件添加到列表中
pd.concat(df_list)#转化为DataFrame
二、查看
df.shape
df.shape
#该方法会返回这个表的(行数,列数)
df.columns
表的标题
df.columns
Index(['用户id', '姓名', '性别'], dtype='object')
df.head()
df.head() #默认读取前五行
df.head(10) #读取前10行
三、保存
1、保存
excel,csv,txt写入文件的方式基本类似,以pandas的to_xx()方式写入;因为三者类似,这里只用excel格式来示例。
(1)index:参数只有True 或者 False 是否保留行索引
(2)columns: 通过列索引指定所需列
(3)sheet_name: sheet名称
(4)encoding:编码格式,utf-8或者gbk
(5)na_rep: 缺失值填充
(6)inf_rep:无穷值填充
(7)index_label: 行索引标签
(8)header: 默认为True,False没有列索引,如需更改列名,则header = ["列1","列2","列3"]
df.to_excel(r'工作表1.xlsx',index=False)
#最简单,需要什么参数就是自己加
df.to_excel(r"1.xlsx",index = False,columns = ["用户id","姓名","性别"],encoding = "utf-8",sheet_name = "示例",na_rep = "Na",inf_rep = "Na")
to_csv时需设置sep参数
2、多个表写入同个文件
多个数据表需同时写入一个文件时,需用到pandas的ExcelWriter
df1=pd.read_excel(r'工作表.xlsx',nrows=5)
df2=pd.read_excel(r'工作表.xlsx',nrows=5)
writer = pd.ExcelWriter(r"工作表2.xlsx",engine = "xlsxwriter")
df1.to_excel(writer,sheet_name = "例1",index=False)
df2.to_excel(writer,sheet_name = "例2",index=False)
writer.save()
writer.close()
输出结果存在多个sheet页
四、新建
1、通过列表创建DataFrame
用columns参数来定义列名,或者用index来定义行索引
df = pd.DataFrame(data=['a','b','c','d', 'e'],
columns=['f'],index=['A','B','C','D','E'])
对应的也可以用嵌套的列表进行创建,这样columns参数就不止一个了
2、使用字典创建DataFrame
字典样式:
dict = {key1 : value1, key2 : value2, key3 : value3}
创建:
df2=pd.DataFrame({'key1' : ['value1','value2'], 'key2' :['value1','value2'], 'key3' :['value1','value2']})
df2