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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

White_Mountain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值