2019-06-27 Python实现Vba中的字典功能(2)

第一篇文章(2019-06-26 Python实现Vba中的字典功能 - )补充

在第一篇文章最后输出到excel表时,第一列中会有合并单元格情况出现,查阅资料最终找到解决问题的方法。

首先,明白了用作关键字的key在构建完数据后,在pandas中称为层次化索引

查找关于层次化索引的处理方法

最先考虑层次化索引方法中的 重排分级顺序


swaplevel根据给定的编号或name属性进行交换层次化索引

sortlevel 根据给定的级别的值进行排序

d1.index.names =['class','name']

d2=d1.swaplevel('class','name'')

输出到excel表中时发现,姓名列在第一列,班级在第二列,改变了顺序,没有了合并单元格,免强达到了目的。没有没更好的解决方法呢?继续找资料,最终找到了方法

将层次化索引转换为列

d1.index.names = ['class','name']

d2=d1.reset_index('class','name'')#将层次化索引转换为列

完整代码

'''

import numpy as np

import pandas as pd

import os

from os.path import exists

#改变当前的路径

os.chdir(r'D:\test\p2\source2')

#将当前目录下的文件以列表的形式存放

file = os.listdir("./")

result = "rs.xls"

if exists(result):

    os.remove(result)

df_0 = pd.read_excel(file[0])

print(df_0.columns)

print('表头列名:\n',str(df_0.columns),file=open(r'D:\test\p2\test2.txt', "a"))

print("关键字参考:  ['班级','姓名']\n",file=open(r'D:\test\p2\test2.txt', "a"))

keyw=eval(input("请输入合并时的关键字,比如:班级+姓名,输入,['班级','姓名']:"))

print('关键字:\n',str(keyw),file=open(r'D:\test\p2\test2.txt', "a"))

colf=df_0.columns.tolist()#将列表名转成字典

col_list = [item for item in colf if item not in keyw] + [item for item in keyw if item not in colf]#在列表名中减去关键字

print(col_list)

data_dict2=df_0.set_index(keyw).T.to_dict('list')

d1=pd.DataFrame(data_dict2)

d1=d1.T

d1.index.names = keyw

#d2=d1.swaplevel('name','class')

d2=d1.reset_index(keyw)#将层次化索引转换为列

d2.rename(columns=dict(enumerate(col_list)),inplace=True)

d2.to_excel(r'D:\test\p2\rs.xls', index=False)

'''

这个问题还是没弄明白:

vba中重复人员只会取第一个存入,后面重复的都丢掉。而在pandas里好像取的是最后一个。什么情况,哪位解释一下。

你可能感兴趣的:(2019-06-27 Python实现Vba中的字典功能(2))