import pandas as pd
import pandas as pd
笔记,不错。
不能直接贴屏?!
图片要用文件上传模式,一般。
一、涉及知识点
1、pandas读取已经存在的Excel文件
2、涉及的BIF操作:
df=pd.read_excel('F:/sdf/sdf/output.xlsx',header=None)
pd.to_excel('F:/sdf/sdf/output1.xlsx')
df.shape
df.columns
df.header(5)
df.tail(5)
二、问题点
1、读取xls文件异常(xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'Test Tim')
原因:源文件损坏,或者格式有问题(虽然是以.xls结尾,但实际上内容格式有问题的)
import pandas as pd
people=pd.dread_excle('C:/Temp/people.xlsx')
print(people.shape)
print(people.columns)
print('==================')
print(people.tail(3))
read_excel()方法可以使用xlrd Python模块读取Excel 2003(.xls)和Excel 2007+(.xlsx)文件。 to_excel()实例方法用于将DataFrame保存到Excel
people.shape 显示(行数,列数)
people.columns显示Index[Titile]
people.head(3)看前三行数据
people.coumns=[]手动设置header
header默认值为0,当一行为错误数据时可以将header改为1实现正确
pandas 读取现有excel文件的方法:
import pandas as pd
people = pd.read_excel('c:/Temp/People.xlsx')
几个常用的方法:
import pandas as pd
people = pd.read_excel('c:/Temp/People.xlsx')
print(people.shape)
print('=====================')
print(people.columns)
print('=====================')
print(people.head(3))
print('=====================')
print(people.tail(3))
输出结果为
(19972, 6)
=====================
Index(['ID', 'Type', 'Title', 'FirstName', 'MiddleName', 'LastName'], dtype='object')
=====================
ID Type Title FirstName MiddleName LastName
0 1 Employee NaN Ken J Sánchez
1 2 Employee NaN Terri Lee Duffy
2 3 Employee NaN Roberto NaN Tamburello
=====================
ID Type Title FirstName MiddleName LastName
19969 20775 Individual Customer NaN Crystal S He
19970 20776 Individual Customer NaN Crystal NaN Zheng
19971 20777 Individual Customer NaN Crystal NaN Hu
集中常见的特殊情况:
1. 当目标文件的首行不是我们想要的header的时候。需要自定义header的行。
注:编程语言的编号是从0开始的,而excel的行号是从1开始的。
例如:目标文件的header行是exel的第二行,那么代码如下:
import pandas as pd
people = pd.read_excel('c:/Temp/People.xlsx',header=1)
print(people.columns)
2。 当目标文件没有header的时候,此时需要pandas我这个文件没有header
代码如下:
import pandas as pd
people = pd.read_excel('c:/Temp/People.xlsx',header=None)
print(people.columns)
这样pandas将默认用整数字来作为header。如上代码输出如下:
Int64Index([0, 1, 2, 3, 4, 5], dtype='int64')
此时要想再给目标文件添加header的话,代码如下:
import pandas as pd
people = pd.read_excel('c:/Temp/People.xlsx',header=None)
people.columns=['ID','Type','Title','FirstName','MiddleName','LastName']
print(people.columns)
打印结果
Index(['ID', 'Type', 'Title', 'FirstName', 'MiddleName', 'LastName'], dtype='object')
注:此时虽然我们在程序里面为目标文件添加了header,但实际上并没有写入目标文件people.xlsx 。
如果想要将增加了header的文件在实际文件里体现,有两种方法:
方法1: 输出到一个新的文件
代码如下:
import pandas as pd
people = pd.read_excel('c:/Temp/People.xlsx',header=None)
people.columns=['ID','Type','Title','FirstName','MiddleName','LastName']
print(people.columns)
people.to_excel('C:/Temp/output.xlsx')
print('done!')
注:此时输出的新目标文件包含了我们刚才在程序里面定义的header,同时系统也自动为新文件增加了默认的索引。
我们需要将“ID”指定为索引:
------------复习指定索引------------
import pandas as pd
people = pd.read_excel('c:/Temp/People.xlsx',header=None)
people.columns=['ID','Type','Title','FirstName','MiddleName','LastName']
people = people.set_index('ID')
print(people.columns)
people.to_excel('C:/Temp/output.xlsx')
print('done!')
此方法的一个特点是需要产生一个新的DataFrame,然后在通过people这个变量来重新引用它
--------------复习结束--------------
指定索引的另外一种方式:直接在当前DataFrame上进行修改。
代码如下:
people = pd.read_excel('c:/Temp/People.xlsx', header=None)
people.columns = ['ID', 'Type', 'Title', 'FirstName', 'MiddleName', 'LastName']
people.set_index('ID', inplace=True)
print(people.columns)
people.to_excel('C:/Temp/output.xlsx')
print('done!')
注意:此时的“ID”列已经被定义为了“index”,在我们打印columns的时候index的列名是不会被打印的。
***当我们在使用pandas.read_excel方法读取一个现有的excel文件的时候如果知道该文件的哪一列为index列,则需要指定出来,否则程序会在读取后自动为目标文件添加一个默认的index列。
代码示例:
import pandas as pd
df = pd.read_excel('C:/Temp/output.xlsx',index_col='ID')
df.to_excel('C:/Temp/output2.xlsx')
print('done!')