从零开始用python处理excel数据_从零开始使用python/pandas操作Excel (2)

接上节Jingwei:从零开始使用python/pandas操作Excel (1)​zhuanlan.zhihu.com

pandas读取Excel数据表进阶

接下来我们再来看一个例子。其中B2至D2为列标题。图1 Excel数据表示例

注意,此时的数据表不再是Excel文件的第一张表。用默认方式读取Excel文件将获得Sheet1的数据。然而Sheet1没有数据,所以读取的结果就是一个空数据表。图2 空工作表读取结果

为pd.read_excel函数添加额外的参数sheet_name即可指定所读取Excel工作表的名称。

xl = pd.read_excel('指向Excel文件的路径', sheet_name='工作表名称')图3 数据读取结果

此时,我们再来看读取到的DataFrame,出现了很多不明字段。这是因为read_excel的默认读取范围从工作表左上角(A1单元格)到数据表的最末行和最末列。由于第一行没有数据,列标题被默认显示为Unnamed:x。第一列也没有数据,所以显示NaN(Not a Number)。这里要注意的是,DataFrame的行或列索引序号都是从0开始的,即第0行为起始行,第0列为起始列。

读取范围的修正

接下来,我们要做一些调整,使Excel工作表的第二行成为列标题,第二列成为数据表的首列。

xl = xl.iloc[:, 1:] # 选取DataFrame的所有行,并截取第二列至最末列。

df = xl.iloc[1:] # 选取DataFrame的第二行至最末行,保留所有列,并将选取的数据表保存在一个新的变量中。图4 选取范围

我们用到了DataFrame的iloc函数

DataFrame.iloc[a:b, c:d]

a、b、c、d为整数。用于选取DataFrame的第a行到第b行、第c列到第d列。

若a不指定数值,则表示从起始行开始;若b不指定数值,则表示到最末行结束;c和d同理。

iloc函数只是选取了DataFrame中的一部分,并不会改变DataFrame的信息。

DataFrame.iloc[a:b]

a、b为整数。在保留所有列的前提下,用于选取DataFrame的第a行到第b行。

现在我们再来看看xl和df两个变量中所存储的DataFrame。图5a 调整选取范围后的xl变量图5b 调整选取范围后的df变量

df中的数据内容是我们需要的,但是没有得到正确的列标题以及从0开始的索引。我们需要把xl的第0行变为df的列标题,并重新定义索引。

以下两行代码将重新定义df的列标题和索引。

df.columns = pd.Index(xl.iloc[0]) # xl.iloc[0]获取xl变量中数据表的第0行

df.index = pd.Index(range(df.shape[0])) # 根据df的行数重新生成行索引

这里我们用到了Index函数

range

df.shape

我们来看一看修正后的df变量。图6 数据表修正

仔细看会发现,左上角多了一个“0”。原来在将xl第0行传递给df.columns时,xl第0行的行索引被定义为df.columns的名称了。图7 columns的名称

我们可以将df.columns.name的值变为None,就可以把多了的那个“0”变成空值。

df.columns.name = None

最后我们再来看一下修正后的df变量。我们终于得到所需要的数据表了。图8 最终的数据表

小结

本节中,我们讲述了一些进阶方法,用来处理Excel工作表的读取和索引的修正。之后,我们将探讨用pandas代替Excel进行数据处理的方法。敬请期待。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值