要求:原始数据去掉非关键字段,并按照需求字段进行多条件排序。
2、利用pd.read_excel导入文件;
pandas.read_excel(io,sheet_name = 0,header = 0,names = None,index_col = None,usecols = None,squeeze = False,dtype = None, ...)
io
:字符串,文件的路径对象。
sheet_name
:None、string、int、字符串列表或整数列表,默认为0。字符串用于工作表名称,整数用于零索引工作表位置,字符串列表或整数列表用于请求多个工作表,为None时获取所有工作表。
值 | 对应操作 |
---|---|
sheet_name=0 | 第一张作为DataFrame |
sheet_name=1 | 第二张作为DataFrame |
sheet_name=“Sheet1” | 第一张作DataFrame |
sheet_name=[0,1,'Sheet5'] | 第1页,第2页和第5页作为DataFrames的字典。 |
header
:指定作为列名的行,默认0,即取第一行的值为列名。数据为列名行以下的数据;若数据不含列名,则设定 header = None。
names
:默认为None,要使用的列名列表,如不包含标题行,应显示传递header=None
。
index_col
:指定列为索引列,默认None列(0索引)用作DataFrame的行标签。
usecols
:int或list,默认为None。
squeeze
:boolean,默认为False,如果解析的数据只包含一列,则返回一个Series。
dtype
:列的类型名称或字典,默认为None。数据或列的数据类型。例如{'a':np.float64,'b':np.int32}使用对象保存存储在Excel中的数据而不解释dtype。如果指定了转换器,则它们将应用于dtype转换的INSTEAD。
skiprows
:省略指定行数的数据,从第一行开始。
skipfooter
:省略指定行数的数据,从尾部数的行开始。
dtype
:字典类型{'列名1':数据类型,‘列名’:数据类型},设定指定列的数据类型。
3、读取所需要的关键字段;
4、根据字段进行多条件排序;DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)
参数说明
参数 | 说明 |
---|---|
by | 指定列名(axis=0或’index’)或索引值(axis=1或’columns’) |
axis | 若axis=0或’index’,则按照指定列中数据大小排序;若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0 |
ascending | 是否按指定列的数组升序排列,默认为True,即升序排列,False,降序排列。 |
inplace | 是否用排序后的数据集替换原来的数据,默认为False,即不替换 |
na_position | {‘first’,‘last’},设定缺失值的显示位置 |
5、保存并写入新的工作表;
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='',
float_format=None, columns=None, header=True, index=True,
index_label=None, startrow=0, startcol=0, engine=None,
merge_cells=True, encoding=None, inf_rep='inf', verbose=True,
freeze_panes=None)
excel_writer : 字符串或ExcelWriter 对象;文件路径或现有的ExcelWriter。
sheet_name :字符串,默认“Sheet1”;将包含DataFrame的表的名称。
na_rep : 字符串,默认‘ ’ ,缺失数据表示方式。
float_format : 字符串,默认None 格式化浮点数的字符串。
columns : 序列,可选 ,要编写的列。
header : 布尔或字符串列表,默认为Ture。 写出列名。如果给定字符串列表,则假定它是列名称的别名。
index :布尔,默认的Ture 写行名(索引)
index_label : 字符串或序列,默认为None。 如果需要,可以使用索引列的列标签。如果没有给出,标题和索引为true,则使用索引名称。如果数据文件使用多索引,则需使用序列。
startrow : 左上角的单元格行来转储数据框
startcol : 左上角的单元格列转储数据帧
engine : 字符串,默认没有 使用写引擎 - 您也可以通过选项io.excel.xlsx.writer,io.excel.xls.writer和io.excel.xlsm.writer进行设置。
merge_cells : 布尔,默认为Ture 编码生成的excel文件。 只有xlwt需要,其他编写者本地支持unicode。
inf_rep : 字符串,默认“正” 无穷大的表示(在Excel中不存在无穷大的本地表示)
freeze_panes : 整数的元组(长度2),默认为None。 指定要冻结的基于1的最底部行和最右边的列
#导入pandas库
import pandas as pd
#读取Excel文件,加入两个变量,实际可以用一行代码实现,df_1 = pd.DataFrame(pd.read_excel(io,sheet_name=,...))
name_path = 'A.xls'
user_data = pd.read_excel(name_path)
df_1 = pd.DataFrame(user_data)
#筛选有效关键列字段
df_1 = df_1[['资产编码', '资产名称', '开始使用日期', '分类名称', '使用部门', '规格型号', '存放地点', '数量', '资产原值']]
#首先按照“存放地点”、然后按照“使用部门”,在按照“分类名称”,多条件升序排列
df_1 = df_1.sort_values(['存放地点','使用部门','分类名称'], ascending=True)
#写入并保存文件
filepath = "B.xlsx"
writer = pd.ExcelWriter(filepath)
df_1.to_excel(excel_writer=writer,index=False,sheet_name='Sheet1')
writer.save()
#writer.close(),这个不需要加,加入会报错。
最终实现结果展示: