pandas 可以读取多种的数据格式,针对excel来说,可以使用read_excel()
读取数据,如下:
import pandas as pd
df=pd.read_excel('test_xls')
print(df.head())
但是,值得注意的是:pandas在读取excel文件的时候需要调用读取第三方库(简称 引擎)
举个不太恰当的例子,张三买车得到了一次砸金蛋的机会,他当然不能用手砸,于是他顺手抄起旁边的锤子就砸了一个金蛋。这个例子里面的张三相当于pandas,金蛋就是excel文件,锤子就是读取文件的引擎。
在pandas中支持四种excel的文件读取引擎,我们用的最多的是"xlrd"和"openpyxl",其中"xlrd"是用来读取".xls"文件的,而"openpyxl"是用来读取".xlsx"及其他07版以后的新格式
其实"xlrd"和"openpyxl"都是python的库,可以单独的安装使用。命令:pip install xlrd
在该代码中,df.head()
用来读取数据的前5行,pandas会在读取数据后自动在数据前加一行索引,也就是在YM前面的一列,这个索引一般是用来定位数据的。默认情况下,index_col=None,也就是说默认会添加一列自增的行索引。
如果数据本身有索引列,可以指定第几列为索引,如索引在第一列那我们就写index_col=0,第二列就写index_col=1
**索引可以不唯一,也可以有多层索引(MultiIndex)如果有多层索引,那么index_col需要传入一个数组,**如,df=pd.read_excel('test.xls',index_col=[0,1,3])
就是说把第一列,第二列,第四列都作为索引
如果不指定的话默认自动谈价一行列索引,如果一个数据中出现两个列索引,可以使用header来告诉pandas列索引所在的位置,如header=[0,1]
就是告诉pandas第一列和第二列都是列索引
如果不想显示某一列,可以使用usecols参数。代码有三张写法
df = pd.read_excel("pf.xlsx",usecols=["A,C:E"])
df = pd.read_excel("pf.xlsx",usecols=[1,3,4,5])
df = pd.read_excel("pf.xlsx",usecols=["YM,CJ2,CJ3,CJ4"])
可以用来修改某一列读取的参数类型,一般在数据读取的时候,读到某一列全部是数据,会默认把该列的数据类型定义为int类型,但是,如果遇到数据是0开头的,就会出现问题,因此,可以使用dtype来定义某一列的数据类型为想要的类型,一般是把int类型定义为str类型读取。如一个学号的数据为001
,如果不使用dtype,读取的时候,在终端上显示的就是1
,如果使用dtype={"学号" : str }
后,输出的结果为001
接下来让我们来看另一种情况,上面的例子中,Sheet1
和Sheet2
放置在同一张表的,如果想要区分为两张表,一般方法是可以读两遍read_excel,搭配sheet_name=[表名]
参数。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
df1=pd.read_excel('test.xls',sheet_name='Sheet1')
print(df1.head())
df2=pd.read_excel('test.xls',sheet_name='Sheet2')
print(df2.head())
import pandas as pd
# pandas 存储数据到excel
def pd_toexcel(data,filename):
dfData = { # 用字典设置DataFrame所需数据
'序号':data[0],
'项目':data[1],
'数据':data[2]
}
df = pd.DataFrame(dfData) # 创建DataFrame
df.to_excel(filename,index=False) # 存表,去除原始索引列(0,1,2...)
"""--------------数据用例---------------"""
orderIds=[1,2,3]
items=['A','B','C']
myData=[10,20,30]
testData=[orderIds,items,myData]
filename='write.xlsx'
pd_toexcel(testData,filename)
PS:这里需要用到openpyxl
模块