第一篇文章(2019-06-26 Python實現(xiàn)Vba中的字典功能 - 簡書)補(bǔ)充
在第一篇文章最后輸出到excel表時,第一列中會有合并單元格情況出現(xiàn)计贰,查閱資料最終找到解決問題的方法掖棉。
首先墓律,明白了用作關(guān)鍵字的key在構(gòu)建完數(shù)據(jù)后,在pandas中稱為層次化索引
查找關(guān)于層次化索引的處理方法
最先考慮層次化索引方法中的
重排分級順序
swaplevel根據(jù)給定的編號或name屬性進(jìn)行交換層次化索引
sortlevel 根據(jù)給定的級別的值進(jìn)行排序
d1.index.names =['class','name']
d2=d1.swaplevel('class','name'')
輸出到excel表中時發(fā)現(xiàn)幔亥,姓名列在第一列耻讽,班級在第二列,改變了順序紫谷,沒有了合并單元格齐饮,免強(qiáng)達(dá)到了目的。沒有沒更好的解決方法呢?繼續(xù)找資料笤昨,最終找到了方法
將層次化索引轉(zhuǎn)換為列
d1.index.names = ['class','name']
d2=d1.reset_index('class','name'')#將層次化索引轉(zhuǎn)換為列
完整代碼
'''
import numpy as np
import pandas as pd
import os
from os.path import exists
#改變當(dāng)前的路徑
os.chdir(r'D:\test\p2\source2')
#將當(dāng)前目錄下的文件以列表的形式存放
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("關(guān)鍵字參考:? ['班級','姓名']\n",file=open(r'D:\test\p2\test2.txt', "a"))
keyw=eval(input("請輸入合并時的關(guān)鍵字祖驱,比如:班級+姓名,輸入瞒窒,['班級','姓名']:"))
print('關(guān)鍵字:\n',str(keyw),file=open(r'D:\test\p2\test2.txt', "a"))
colf=df_0.columns.tolist()#將列表名轉(zhuǎn)成字典
col_list = [item for item in colf if item not in keyw] + [item for item in keyw if item not in colf]#在列表名中減去關(guān)鍵字
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)#將層次化索引轉(zhuǎn)換為列
d2.rename(columns=dict(enumerate(col_list)),inplace=True)
d2.to_excel(r'D:\test\p2\rs.xls', index=False)
'''
這個問題還是沒弄明白:
vba中重復(fù)人員只會取第一個存入捺僻,后面重復(fù)的都丟掉。而在pandas里好像取的是最后一個崇裁。什么情況匕坯,哪位解釋一下。