任务4:数据区域的读取,填充整数,文字
首先要在pandas环境下读取一个现有的excel文件。
books = pd.read_excel('C:/Temp/Books.xlsx')
当读取的目标文件数据的起始点不在首行和首列的时候,pandas会从Excel的A1单元格开始读取,目标excel中的空白区域在打印时会显示“NaN”即“Not a Number". 这是我们不想看到的,要想真实的还原目标Excel的内容区域就需要手动改变pandas的读取位置。
手动指定pandas的读取区域
几个关键属性:
skiprows=n: 跳跃n行,即数据从第n+1行开始
usecols="C:F": 内容所在的列区域为excel的C到F
books = pd.read_excel('c:/Temp/Books.xlsx', skiprows=3,usecols='C:F',index_col=None)
注意:这里不指定ID为index的目的是我们后面要对ID的列内容进行写入编辑。
1. 填充ID列
一个DataFrame其每一列其实就是一个Series
验证方法:
print(type(books['ID']))
打印结果:
<class 'pandas.core.series.Series'>
Series 的 at[n] 函数
其中n代表Series里面的第n个元素。
给books里面ID列的第一个元素赋值可以这样写:
books['ID'].at[0] = 100
有了这个函数方法,对于ID列作等差天聪的话我们就可以用 for循环来做:
for i in books.index:
books['ID'].at[i] = i + 1
注:此时打印出来的ID列值不是整数而是浮点类型。因为之前的空白区域被读取并用NaN填充后被程序自动将属性设置为了float64类型。将ID列修改整数的办法是在读取的时候指定dtype。
books = pd.read_excel('C:/Temp/Books.xlsx', skiprows=3, usecols='C:F', index_col=None,
dtype={'ID': str, 'InStore': str, 'Date': str})
注:之所以不用int是因为float无法向int转换。
2. 填充InStore
books['InStore'].at[i] = 'Yes' if i % 2 == 0 else 'No'
3. 填充Date
首先需要调用datetime这个模块,同时引入该模块里的‘date’和‘timedelta’两个类。
设定一个起始日期
start = date(2018, 1, 1)
为每行填充一个相同的日期可以这样写:
books['Date'].at[i] = start
该节的代码入下 :
import pandas as pd
from datetime import date, timedelta
books = pd.read_excel('C:/Temp/Books.xlsx', skiprows=3, usecols='C:F', index_col=None,
dtype={'ID': str, 'InStore': str, 'Date': str})
start = date(2018, 1, 1)
for i in books.index:
books['ID'].at[i] = i + 1
books['InStore'].at[i] = 'Yes' if i % 2 == 0 else 'No'
books['Date'].at[i] = start
print(books)
打印结果
ID Name InStore Date
0 1 Book_001 Yes 2018-01-01
1 2 Book_002 No 2018-01-01
2 3 Book_003 Yes 2018-01-01
3 4 Book_004 No 2018-01-01
4 5 Book_005 Yes 2018-01-01
5 6 Book_006 No 2018-01-01
6 7 Book_007 Yes 2018-01-01
7 8 Book_008 No 2018-01-01
8 9 Book_009 Yes 2018-01-01
9 10 Book_010 No 2018-01-01
10 11 Book_011 Yes 2018-01-01
11 12 Book_012 No 2018-01-01
12 13 Book_013 Yes 2018-01-01
13 14 Book_014 No 2018-01-01
14 15 Book_015 Yes 2018-01-01
15 16 Book_016 No 2018-01-01
16 17 Book_017 Yes 2018-01-01
17 18 Book_018 No 2018-01-01
18 19 Book_019 Yes 2018-01-01
19 20 Book_020 No 2018-01-01
关于填充日期的递增方法请看下集