excel中最常用的功能就是自动填充,在pandas中如何实现呢?
首先先创建一个excel表格
首先读取文件
import pandas as pd
excel_path = r'E://temp/raw.xlsx'
df = pd.read_excel(excel_path)
print(df)
直接读取的话pandas会把所有空行都标为NaN,所以当要读取的文件的起始位置有不必要的空行的时候,应该在read_excel()
方法中传入几个参数指定索引和有效数据列。
import pandas as pd
excel_path = r'E://temp/raw.xlsx'
# skiprows 指定索引行,usecols 指定有效数据从哪列到哪列 (C,D,E)或(C:E)
df = pd.read_excel(excel_path, skiprows=2, usecols='C:E')
print(df)
这样我们就能读取正确的表格了
填充数据
我们先填充id,id是一个等差数列,可以用一个for循环。
import pandas as pd
excel_path = r'E://temp/raw.xlsx'
# skiprows 指定索引行,usecols 指定有效数据从哪列到哪列 (C,D,E)或(C:E)
df = pd.read_excel(excel_path, skiprows=2, usecols='C:E')
for i in df.index:
df['id'].at[i] = i+1
print(df)
# 查看id列的数据类型
print(type(df['id'][0]))
由结果可见,的确是为id列添加数据了,但是数据类型却不对,这是因为当没有数据的时候,默认的类型为float类型。我们可以在读取文件的时候预设值文件的类型,NaN如果直接设置为int类型的话会报错,所以都先设置为str类型。
import pandas as pd
excel_path = r'E://temp/raw.xlsx'
# dtype 传入一个字典,设置每一列的数据类型
df = pd.read_excel(excel_path, skiprows=2, usecols='C:E', dtype=({'id':str, 'name':str}))
for i in df.index:
df['id'].at[i] = i+1
print(df)
# 查看id列的数据类型
print(type(df['id'][0]))
这样的方法修改excel里面的值是先通过for循环得到每一列,表格里面的每一列就是一个Series,通过Series的方法取得具体单元格再修改里面的值,也可以直接使用DataFrame的方法修改单元格的值.
for i in df.index:
df.at[i, 'id'] = i + 1
函数填充
填充完了id,还有成绩这一列,我们用一个1到一百的随机数来生成每个人的成绩。
import pandas as pd
import random
excel_path = r'E://temp/raw.xlsx'
# dtype 传入一个字典,设置每一列的数据类型
df = pd.read_excel(excel_path, skiprows=2, usecols='C:E', dtype=({'id':str, 'name':str}))
# 将函数列生成一个列表
score_list = [random.randint(1, 100) for score in df['score']]
# 将成绩列的值付给score这个Series
df['score'] = score_list
print(df)