第一篇文章(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里好像取的是最后一个。什么情况,哪位解释一下。