pandas中对中文月份进行排序

最近在用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)

    原文作者:White_Mountain
    原文地址: https://blog.csdn.net/cwjcw81/article/details/104417571
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞