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

b621385390b6d32110fe478901abb628.png

接上节

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

pandas读取Excel数据表进阶

接下来我们再来看一个例子。其中B2至D2为列标题。

fe7cb8e0ca8c32c2a921c82312ebe1d1.png
图1 Excel数据表示例

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

ed0b10cef09137e72bb1b2ac013a3651.png
图2 空工作表读取结果

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

xl 

998192c42123f437e77b7828acb523b2.png
图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的第二行至最末行,保留所有列,并将选取的数据表保存在一个新的变量中。

86c27b259d9cec3ae13ec03658185471.png
图4 选取范围

我们用到了DataFrame的iloc函数[1]。上面的两行代码涉及了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。

3ddc7c2100706ce7d7f296012e7ff9a0.png
图5a 调整选取范围后的xl变量

401a953e1582602ffb0b66b49f5817fe.png
图5b 调整选取范围后的df变量

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

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

df

这里我们用到了Index函数[2],其作用是将一个序列转化为数据表的索引对象。DataFrame的columns和index都属于一种索引对象。通过给columns和index赋值,我们可以任意修改数据表的列标题和行索引。

range[3]用于生成一个连续数列。range(x),其中x为正整数,生成的序列由0开始,直到x-1结束。

df.shape[4]存储了数据表各个维度的长度,对于一个二维的数据表,df.shape[0]得到的是第一维的长度,即数据表的行数;df.shape[1]得到的是第二维的长度,即数据表的列数。

我们来看一看修正后的df变量。

8c5cbcd223bdf1796ccacba71612b284.png
图6 数据表修正

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

4c1c874dc101ce3f3d20732d80da4236.png
图7 columns的名称

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

df.columns.name = None

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

ec59e59d6ef2e9c7376d5266d3b81a18.png
图8 最终的数据表

小结

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

参考

  1. ^DataFrame.iloc https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html?highlight=iloc#pandas.DataFrame.iloc
  2. ^pandas.Index https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Index.html#pandas.Index
  3. ^range https://docs.python.org/3.8/library/stdtypes.html#range
  4. ^DataFrame.shape https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.shape.html#pandas.DataFrame.shape
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值