最近在用pandas对数据做处理,可是发现一个很bug的问题
源数据中,月份是用“1月,2月,3月 … 12月”来表示的,这样做完pivot_table以后,就编程了“10月,11月,12月,1月,2月 … 9月”这样的顺序。
尝试使用sort_index,sort_value都没办法修正,网上搜了一下关键字也没有人给出解决方案,最后只能用一个迂回的方式来解决
即先做出Pivot,然后把1月,2月,替换成01月,02月,然后重新排序
这样就能得到想要的数据了
代码如下
import pandas as pd
import numpy as np
x_attr = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']
database = pd.read_excel(r'D:\1\map\database.xlsx',encoding='utf8')
def by_month():
db = pd.pivot_table(database,columns ='month',aggfunc=np.sum,fill_value=0,values='金额').sort_index(kind = 'heapsort') # 先做pivot_table
db.rename(columns={'1月':"01月",'2月':"02月",'3月':"03月",'4月':"04月",'5月':"05月",'6月':"06月",
'7月':"07月",'8月':"08月",'9月':"09月",},inplace=True)
# 把月份重命名
db.sort_index(axis=1,inplace=True)
# 重新排序
# 一开始想直接替代database里month这一列的月份,此方法效果同以上办法,但是速度会变慢,所以还是先做pivot_table再改更快
# for x in range(0,9):
# database.loc[database['month']==x_attr[x],'month'] = ((str(0)+str(x+1))+'月')
print(db)