excel及数据处理

一、xlrd

二、xlwt

三、openyxl

四、numpy

五、pandas

openpyxl

1. 简介

openpyxl模块是一个读写Excel2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl能够同时读取和修改Excel文档

2.  安装和引用

pip install openpyxl

from openpyxl import load_workbook, Workbook

3. Workbook对象

3.1 创建Workbook对象

excel = openpyxl.Workbook()      会创建新的excel时会默认创建一个sheet

excel = openpyxl.load_workbook("hello.xlsx")    导入已经存在的excel

3.2 Workbook对象的方法

方法 解释 例子 结果
get_sheet_names 获取所有表格的名称,新版已不适用    
get_sheet_by_name 通过表格名称获取worksheet对象,新版已不适用    
get_active_sheet 获取活跃的表格,新版已不适用    
  通过表格名称获取worksheet对象 excel['sheetname']
remove_sheet('sheet') 删除一个表格 excel.remove_sheet(excel["mysheet"])  参数为sheet对象
create_sheet(title,index) 创建一个空的表格,index=0插入到开头 excel.create_sheet('ghk',0) index表示插入表格的位置
copy_worksheet('sheet') 在workook内拷贝表格  excel.copy_worksheet(excel["mysheet"])  只能在一个excel里复制,不能跨excel复制
active 获取当前活跃的Worksheet excel.active 没有则返回None,有则返回Worksheet对象-<Worksheet "abc">
worksheets 以列表形式返回所有worksheet excel.worksheets

[<Worksheet "abc">, <Worksheet "def">]

read_only 判断是否以只读形式打开 excel.read_only False
encoding 获取文档的字符集编码 excel.encoding  'utf-8'
properties 获取文档的源数据,标题作者等 excel.properties

 

sheetnames 获取工作簿中的表(列表) excel.sheetnames  ['abc','def']

 

 

 

 

 

 

 

 

 

4.Worksheet对象 

4.1获取Worksheet对象

sheet = excel.get_sheet_by_name("Sheet1") ---【注:包的新版本已不再适用】        或

sheet = excel["Sheet1"]        或

sheet = excel.worksheets[0]

4.2worksheet的方法

方法 解释 例子  结果
title 表格的标题  sheet.title="new title"  
max_row 表格的最大行数    
max_column 表格的最大列数    
min_row 表格的最小行    
min_column 表格的最小列    
rows 按行获取单元格(Cell对象)-生成器    
columns 按列获取单元格(Cell对象)-生成器    
dimensions 表格的大小,即左上角和右下角的坐标    
freeze_panes 冻结窗格,主要用于冻结顶部的行或左边的列,用户滚动表格时始终可见    
values 按行获取表格的数据内容-生成器    
iter_rows(min_row=1,max_row=4,min_col=2,max_col=4) 按行获取所有单元格   返回的是一个Cell对象,Cell对象不等于cell的值
iter_columns 按列获取所有单元格    
append 在表格末尾添加数据    
merged_cells 合并多个单元格    
unmerged_cells 移除合并的单元格    
  获取cell对象 excel['sheetname']['A1'] 返回一个Cell对象
    excel['sheetname'].cell(row=1,column=2) 返回一个Cell对象
sheet_properties.tabColor 给sheet的标题一个背景颜色 sheet.sheet_properties.tabColor='e7e7e7'  

 

 

 

 

 

 

 

 

5.Cell对象

5.1 获取单个cell对象

sheet['A1']     或

sheet.cell(row=1,column=2)

5.2 获取多个cell对象

cell_range = sheet['A1':'C2']    返回一个元祖,元祖内容是两行三列Cell对象,而非cell的value

col_content = sheet['C']     返回C列的内容,也是元祖形式Cell对象

col_content = sheet['A:C']   返回A列到C列(包含C列)的Cell对象,元祖形式,一列一列取值

row_content = sheet[10]     返回第10行数据

row_content = sheet[10:12]    返回第10行到第12行数据

sheet.iter_rows(min_row=1,max_row=4,min_col=2,max_col=4)             按行取,行数和列数都包含在内

sheet.iter_columns(min_row=1,max_row=4,min_col=2,max_col=4)       按列取

如果想迭代所有行和列

sheet.rows()     按行取

sheet.columns()     按列取

 

备注:多个cell对象的获取返回的都是元祖形式,根据按行取或按列取,返回元祖里的内容不太一样

5.3 cell对象的方法

方法 解释 例子 结果
row 单元格所在的行 excel['sheet1'].cell(row=1,column=2).row 返回行号1
column 单元格所在的列 excel['sheet1'].cell(row=1,column=2).column 返回列号B
value 单元格的值 excel['sheet1'].cell(row=1,column=2).value 返回单元格里的值
coordinate 单元格的坐标 excel['sheet1'].cell(row=1,column=2).coordinate 返回坐标B1

 

 

 

 5.4 cell赋值

sheet[“A3”] = "ABC"  或   sheet["A3"].value = "ABC"

sheet.cell(row=1,column=2).value = "ABC"

 6.保存更改

excel.save("test.xlsx")

-----------------------------------------------------------------------------------------------------------

 

 numpy

1.简介

numpy提供了ndarray和matrix两种类型的数据

2.安装及引用

pip install numpy

import numpy as np

3.数组的使用

3.1创建数组

a=np.array([1,2,3,4,5,6])

print a   -->  [1,2,3,4,5,6]

3.2 数组变形

b=a.shap(2,3)  #把a变为两行三列

print b  --->  [[1,2,3],[4,5,6]]

c=b.ravel()   #拉直数组

print c --->   arry([1,2,3,4,5,6])

-------------------------------------------------------------------------------------------------------------

pandas

Pandas是python的一个数据分析包,建立在numpy库之上

安装:pip install pands

导入:import pandas as pd、from pandas import Series,DataFrame

Series:一维数组,Series 就如同列表一样,一系列数据,每个数据对应一个索引值。比如这样一个列表:[9, 3, 8],如果跟索引值写到一起,就是:

index data
0 9
1 3
2 2

 

 

 

创建对象:s=Series([100,"python","soochow"])

print s的时候会把里面的值和索引都打印出来,索引是从0开始的整数

输入 s.values   值

输出 array([100,'python','soochow'], dtype=object)

输入 s.index    索引

输出 Int64Index([0,1,2], dtype=int64)

series可以自定义索引

s2=Series([100,'python','soochow'], index=['mark','title','name'])

输入 s2.index

输出 Index(['mark','title','name'],dtype=object)

可以根据索引,修改元素的值,例如s2["name"]="qq"

另外一种定义方法:

sd={"python": 8000,"c++":8100,"c#":4000}    前面的数是索引,后面的是值

s4=Series(sd)

c# 4000
c++ 8100
python 8000

 

 

s4里面的数据内容可以根据索引的不同位置而改变,根据索引而自动对齐排列,如果索引不存在自动赋值NaN,索引的名字也是可以重新定义的,例如

s6=Series(sd, index=["java","python","c++","c#"])

java NaN
python 8000
c++ 8100
c# 4000

 

 

 

pd.isnull(s6)/pd.notnull(s6)用来判断值是否为空,值为True/False则索引对应的值是空

java True
python False
c++ False
c# False

 

 

 

 

备注:或用对象方法s6.isnull()

如果series里面的数据都是数字的话,是可以计算的,比如s3[s3>5]取s3里的值大于5的项,s3*5得到的是s3里的值都乘以5

DataFrame:二维的表格型数据结构,类似数据库中的table,竖行称之为columns,横行为index

import pandas as pd
from pandas import Series, DataFrame
data = {"name":["yahoo","google","facebook"], "marks":[200,400,800], "price":[9, 3, 7]}
f1 = DataFrame(data)
f1的值:
    marks  name      price 
0    200    yahoo     9 
1    400    google    3 
2    800    facebook  7 

字典中的键就是DataFrame的columns的值,columns的顺序没有规定,就如同字典中键的顺序一样,但是他的顺序是可以被规定的。

columns的数量还可以比data的columns的数量多,会被自动赋值NaN

f2 = DataFrame(data, columns=['name','price','marks'])
f2的值:
       name     price  marks 
0     yahoo     9      200 
1    google     3      400 
2  facebook     7      800 

DataFrame还可以定义index的值,index的数量不能超过data的行数,否则会报错:

f3 = DataFrame(data, columns=['name', 'price', 'marks', 'debt'], index=['a','b','c'])
f3的值:
       name      price  marks  debt 
a     yahoo      9      200     NaN 
b    google      3      400     NaN 
c  facebook      7      800     NaN

另外一种定义方式:第一层键是数列名称,第二层字典键是每横行索引,第二层字典值是对应的数据

newdata = {"lang":{"firstline":"python","secondline":"java"}, "price":{"firstline":8000}}
f4 = DataFrame(newdata)
f4的值:
              lang     price 
firstline     python   8000 
secondline    java     NaN 
DataFrame(newdata, index=["firstline","secondline","thirdline"])   #额外添加了索引,默认为NaN
              lang     price 
firstline     python   8000 
secondline    java     NaN 
thirdline     NaN      NaN 

取值,取出来的是Series,所以说DataFrame是由一个一个的series组成的:

f3['name']
a       yahoo 
b      google 
c    facebook 
Name: name
f3['debt'] =  Series([2.2, 3.3], index=["a","c"]) 得到
       name  price  marks  debt 
a     yahoo  9        200   2.2 
b    google  3        400   NaN 
c  facebook  7        800   3.3
 

赋值:

f3['debt'] = 89.2
f3的值:
      name     price  marks  debt 
a     yahoo     9        200  89.2 
b    google     3        400  89.2 
c  facebook     7        800  89.2
f3["price"]["c"]= 300 
       name   price   marks  debt 
a     yahoo   9       200    2.2 
b    google   3       400    NaN 
c  facebook   300     800    3.3 


Panel:三维的数组

读取excel(需要安装openpyxl pip install openpyxl)

xls=pd.ExcelFile("./marks.xlsx")

获取sheet表

sheet1=xls.parse("Sheet1")

转载于:https://www.cnblogs.com/zz27zz/p/9401929.html

你可能感兴趣的:(excel及数据处理)