1、pandas基本读取和写入excel表格

1.1、pandas读取excel表格

import pandas as pd
# 创建空DataFrame实例,DataFrame就是数据帧
df = pd.DataFrame({'id':[1,2,3],'name':['张三','李四','王五']})
# pandas默认第一个列会自动创建索引,使用set_index()方法指定索引
df = df.set_index('id')
df.to_excel("d:/output.xlsx")
print('Done!')

1.2、pandas写入excel表格

import pandas as pd
# index_col参数表示读取时就指定索引列
people = pd.read_excel("D:\py_workspace\pandas_excel\People.xlsx",index_col='ID')# header=1表示跳过第一行,从第二行开始;当第一行位脏数据时可以这么设置,如果第一行每一列全部为空,那么pandas自动从第二行开始
# people = pd.read_excel("D:\py_workspace\pandas_excel\People.xlsx",header=1)
# shape表示属性,返回元组,元组第一个表示行,第二表示列# 如果我们excel表格没有列名,需要把header设置为None,那么默认给列名是0,1,2...形式
# people = pd.read_excel("D:\py_workspace\pandas_excel\People.xlsx",header=None)
# 设置列名
# people.columns= ['ID','Type','Title','FirstName','MiddleName','LastName']
# 设置ID列为索引,inplace=True表示直接修改这个DataFrame
# people.set_index('ID',inplace=True) # 注意区别people = people.set_index('ID') 代码
print(people.shape) #输出结果:(19972, 6)
# columns属性是列,类型<class 'pandas.core.indexes.base.Index'>
print(people.columns) # 输出结果:Index(['ID', 'Type', 'Title', 'FirstName', 'MiddleName', 'LastName'], dtype='object')
print("前五行\n",people.head(5))
print("后三行\n",people.tail(3))
# 由于读取pepole文件时index_col指定了索引列,所以新产生的索引列就是ID,不会自动生成一个索引列
people.to_excel("D:\outpepole.xlsx")

【注意】

(1)读取excel表格时可以read_excel()方法的index_col属性指定索引列,这样就不会自动生成索引列;该方法的header属性用来指定标题头,可以设置header=None表示没有列名,就会自动生成列名如0,1,2.....等

(2)DataFarme的shape属性输出行数和列数组成的元组,而DataFrame的columns属性则显示所有的列名,DataFarme的index属性表示索引序号;

2、pandas操作Excel列/行/单元格

我们需要注意pandas操作excel表格其实就是DataFrame,而DataFrame是个二维的;其中我们可以把excel中的每一列理解为Series序列对象,而DataFrame可以有Series序列对象组成。

2.1、列/行/单元格基本操作

【例子1】

import pandas as pd
# 生成一个空的序列对象
# s1 = pd.Series()
# s1.index表示series的名字,s1.name表示series的索引,series的data属性在以后版本将过期
d = {"x":100,"y":200,"z":300}
s1 = pd.Series(d) # x/y/z是索引,100/200/300是列值
print(s1)
print(s1.index,s1.name) # x/y/z,None

【例子2】

import pandas as pd
# 列表
L1 = [400,500,600]
L2 = ['a','b','c']
# L1为data,L2为索引
s2 = pd.Series(L1,index=L2)
print(s2)

【例子3】

import pandas as pd
s_a = pd.Series([1,2,3],index=[1,2,3],name='A')
s_b = pd.Series([10,20,30],index=[1,2,3],name='B')
s_c = pd.Series([100,200,300],index=[1,2,3],name='C')df = pd.DataFrame({s_a.name:s_a.data,s_b.name:s_b.data,s_c.name:s_c.data})
print(df)

【例子4】

import pandas as pd
s_a = pd.Series([1,2,3],index=[1,2,3],name='A')
s_b = pd.Series([10,20,30],index=[1,2,3],name='B')
s_c = pd.Series([100,200,300],index=[1,2,3],name='C')# 这种方法是把每个序列作为一行放入到DataFrame中
df_1 = pd.DataFrame([s_a,s_b,s_c])
print(df_1)

2.2、pandas实现excel表格自动填充

import pandas as pd
from datetime import date,timedelta
def add_month(d,md):"""计算月份:param d: :param md: :return: """yd = md//12m = d.month +md%12if m!=12:yd +=m//12m = m % 12return date(d.year+yd,m,d.day)# skiprows=3跳过前三个空行;
# usecols="C:F"表示从C列到F列,也可以写成usecols="C,D,E,F"
# dtype={'ID':str} 设置ID列为字符串类型books = pd.read_excel("./Books.xlsx",skiprows=3,usecols="C:F",index_col=None,dtype={'ID':str,'InStore':str,'Date':str}) # index_col列索引
# 其实books的某一列就是一个Series对象
# type(books['ID'])就是个series序列对象
# books['ID'].at[0]=100
start_date = date(2018,1,13)
for i in books.index: # books.index就是0到19# books.at[i,'ID']等效于books['ID'].at[i]books['ID'].at[i] = i+1books['InStore'].at[i] = 'Yes' if i%2==0 else 'No'# 日期天数自动加1,timedelta只能加天、小时、分钟、秒# books['Date'].at[i] = start_date + timedelta(days=i)# 加年份# books['Date'].at[i] = date(start_date.year+i,start_date.month,start_date.day)books['Date'].at[i] = add_month(start_date,i)
# excel默认空值是NaN就是float64类型print(books)
# 设置ID列为索引,不使用自动产生的索引
books = books.set_index("ID") # books.set_index("ID",inplace=True)这个是直接修改
books.to_excel("./output.xlsx")

【注意】

(1)在读取excel表格时,如果从几行开始读取可以使用read_excel()方法的参数skiprows来跳过前面多少行;而usecols参数表示从第几到第几列读取;参数dtype通过每列索引来指定该列数据的类型是是什么,而dtype是字典类型;

(2)DataFarme数据帧的index属性表示索引的序号从0开始,DataFarme的at[]方法就是获取某个位置的值;DataFarme的loc[]方法表示定位到某个位置;DataFrame数据帧的set_index()表示设置索引。

2.3、对excel中进行计算

import pandas as pd
books = pd.read_excel("./Books.xlsx",index_col="ID") # index_col指定索引列
# 计算Price的值等于ListPrice列和Discount列相乘
# pandas会自动对齐单元格进行计算
# books['Price'] = books['ListPrice'] * books['Discount']
for i in books.index: # books.index表示索引,就是对每一行就行处理books['Price'].at[i] = books['ListPrice'].at[i] * books['Discount'].at[i] # 等同于上面的计算# 给每本书价格涨价2元
def add_price(x):return x+2
# print(books['ListPrice'].dtype)
# books['ListPrice'] = books['ListPrice'] +2
# books['ListPrice'] = books['ListPrice'].apply(add_price)
# pandas中的apply()方法是把DataFrame的一列或几列遍历计算
books['ListPrice'] = books['ListPrice'].apply(lambda x:x+2)
print(books)

2.4、对excel中进行排序或多重排序

pandas对excel进行爬行使用的是DataFrame的sort_values()方法:

## 参数
sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)
#### 参数说明
axis:0按照行名排序;1按照列名排序
level:默认None,否则按照给定的level顺序排列---貌似并不是,文档
ascending:默认True升序排列;False降序排列
inplace:默认False,否则排序之后的数据直接替换原来的数据框
kind:默认quicksort,排序的方法
na_position:缺失值默认排在最后{"first","last"}
by:按照那一列数据进行排序,但是by参数貌似不建议使用
import pandas as pd
products  = pd.read_excel("./List.xlsx", index_col="ID")
# sort_values()方法是对DataFrame进行排序,其中的by表示指定排序字段
# sort_values()方法的ascending参数默认是从小到大爬行,默认值是True
products.sort_values(by='Price',inplace=True,ascending=False) # inplace=True表示直接修改当前DataFrame不会新增一个
print(products)print("="*30,"多重排序","="*30)
products_2  = pd.read_excel("./List.xlsx", index_col="ID")
# 多重排序时sort_values()方法的by属性是一个列表,不是一个字符串
# 此时的ascending时一个列表,其实这个列表跟by属性的列表是一一对应的
products_2.sort_values(by=['Worthy','Price'],inplace=True,ascending=[True,False])
print(products_2)

【注意】在单一排序时sort_values()中by是字符串指定到那一列就行,如果需要进行多重排序则sort_values()方法中的by参数为列表类型需要指定多列,而ascending也是列表类型与by中列是对应关系。

2.5、excel中数据过滤和刷选

DataFrame中loc方法使用的是column列名和index索引名进行定位

import pandas as pd
students = pd.read_excel("./Students.xlsx",index_col="ID")
def age18_to_30(age):# return age>=18 and age<30return 18<=age<30 # 这种写法只限python语言def level_score(score):return 85<= score <=100
# loc需要指定列表形式数据,指定某一列;loc会新生成一个DataFrame
# 3apply方法是Serises序列对象的方法
# students = students.loc[students['Age'].apply(age18_to_30)].loc[students['Score'].apply(level_score)]
# 上面的第二种写法,这是pandas特有写法
# students = students.loc[students.Age.apply(age18_to_30)].loc[students.Score.apply(level_score)]
# 第三种lambda表达式写法
students = students.loc[students['Age'].apply( lambda x: 18 <= x < 30)]\.loc[students['Score'].apply(lambda y: 85 <= y <= 100)]print(students)

也可以用lambda表达式写法

pandas操作excel的应用相关推荐

  1. python 第三方模块之 pandas 操作 excel

    python 解析 excel 对比 包 版本 xls读 xlsx读 xls写 xlsx写 备注 xlrd 1.1.0(2017年8月22日) √ √ 2.0 之后不支持xlsx xlwt 1.3.0 ...

  2. python读写excel模块pandas_如何用python pandas操作excel?

    之前跟大家说过关于python处理excel的问题,但是大家反映有些繁琐,大概涉及内容比较多,于是,小编在日常学习中,发现了更简单的方式,现在给大家展示,以便于大家在日后学习里可以方便使用,一起来看下 ...

  3. pandas写入excel指定行_使用pandas操作excel

    pandas操作excel 最近由于要处理一些excel表格,发现pandas可以免去很多的繁琐的人工劳动,在这里记录一下我所用到的知识. 导入文档 将excel中的工作表导入 filename = ...

  4. 安装命令:pip install xlrd ,pandas操作Excel学习笔记__7000

    pandas操作Excel学习笔记_loc和iloc_7000 pandas操作Excel学习笔记__7000 1.安装环境:pandas需要处理Excel的模块xlrd,所以需要提前安装xlrd.不 ...

  5. Python入门到实战(五)自动化办公、pandas操作Excel、数据可视化、绘制柱状图、操作Word、数据报表生成、pip install国内镜像下载

    Python入门到实战(五)conda使用.pandas操作Excel.数据可视化.绘制柱状图.操作Word.数据报表生成.pip install国内镜像下载 conda使用 常用操作 配置VS+Co ...

  6. Python Pandas操作Excel表格文件:创建新表格,追加数据

    前言: python操作excel表格文件的增删读写,一般需要用到的第三方库有xlwt,xlrd.xlrd负责读取excel,xlwt负责写入excel文件.这种操作方法比较繁琐,效率还不错,通俗易懂 ...

  7. 使用pandas操作excel

    初学pandas的一些总结 pandas操作excel 导入文档 将excel中的工作表导入 对DataFrame进行操作 查看dataframe的行数列数 对于dataframe的某一列进行筛选 对 ...

  8. pandas操作excel,matplotlib.pyplot画图插入到excel,处理复杂excel简单练习

    在数据分析上,一直都在公司zeppelin上敲python/scala代码,进行数据分析,公司内搞了个小考试,操作excel,弄matplotlib画图之类的: 好久没弄过这些了,在小技术上感觉被打脸 ...

  9. python3打包成exe把openpyxl和pandas_Python openpyxl、pandas操作Excel方法简介与具体实例...

    本篇重点讲解windows系统下 Python3.5中第三方excel操作库-openpyxl: 其实Python第三方库有很多可以操作Excel,如:xlrd,xlwt,xlwings甚至注明的数据 ...

最新文章

  1. YOLOv4 资源环境配置和测试样例效果
  2. centos linux分区,人文网-Linux CentOS 系统分区方法
  3. A JWT old for new exchange schema
  4. 网页编程技术二(块级元素和行内标签)
  5. cocos2d-x编程之CCScale9Sprite典型用法
  6. 海致星图2022校招算法笔试题
  7. PATH和CLASSPATH
  8. 铁乐学python_day02-作业
  9. Ambari--服务管理
  10. Bailian4067 回文数字(Palindrome Number)【数学】
  11. 第二部分 python基础 day10\11\12 运算符与基本数据类型
  12. FISCO BCOS 控制台 call调用已经部署的合约 不存在does not exist
  13. python数据分析师工作内容_数据分析师的具体工作职责和工作内容有哪些?
  14. 淘宝商品分享自动转淘宝客推广的特殊主题插件
  15. verilog入门-38译码器
  16. yylabel支持html ios,iOS_YYLabel实现多标签,文字+背景功能
  17. 纪检委,检察院的工资
  18. beautifulsoup菜鸟教程
  19. Microsoft Word 教程「4」,如何在 Word 中应用样式、主题?
  20. Epic League 推出支持 Free to Earn 的 RPG 游戏 Dark Throne

热门文章

  1. [bzoj3175][bzoj4808][网络流-最小割]攻击装置/马
  2. [PC] 2004 忍者神龟2:并肩作战 Teenage Mutant Ninja Turtles2:Battle Nexus
  3. 6-7-3 英文单词排序 (20 分)
  4. Keil,eclipse, netbean, codeblock三个的初步应用体会。
  5. BONO:不走寻常路的服装直销
  6. 如何将EXCEL文件转换为KML
  7. Oracle 数据库备份与恢复
  8. HTML网页设计结课作业--个人介绍(3页)
  9. 【python-tips】非root权限安装pip、其他包
  10. 一分钟学会canvas镂空文本小动画