pandas实现中文排序
在我们使用pandas过程中有时会遇到排序,尤其是中文排序,例如excel排序,按姓名拼音排序等等,而pandas默认的排序并不能满足我们的中文排序,所以有了这个中文排序方式
一、首先实现中文的拼音排序
def to_pinyin(s):'''转拼音:param s: 字符串或列表:type s: str or list:return: 拼音字符串>>> to_pinyin('你好吗') 'ni3hao3ma'>>> to_pinyin(['你好', '吗'])'ni3hao3ma''''return ''.join(chain.from_iterable(pinyin(s, style=Style.TONE3)))
二、利用pandas自定义排序
# 自定义排序 (先取列内容 去重,按拼音排序)df_tmp['cnt'] = pd.Categorical(df_tmp['cnt'], categories=new_list, ordered=True)df_tmp.sort_values(by='cnt', inplace=True)
最后献上完整代码
# -*- coding: utf-8 -*-
from itertools import chain
from pypinyin import pinyin, Style
import pandas as pd'''
公众号:Python数据分析实战
'''def to_pinyin(s):'''转拼音:param s: 字符串或列表:type s: str or list:return: 拼音字符串>>> to_pinyin('你好吗') 'ni3hao3ma'>>> to_pinyin(['你好', '吗'])'ni3hao3ma''''return ''.join(chain.from_iterable(pinyin(s, style=Style.TONE3)))if __name__ == '__main__':# print(sorted(['美国', '中国', '日本']))# print(sorted(['美国', '中国', '日本'], key=to_pinyin))df_tmp = pd.DataFrame([{"aa": "data1", "cnt": "总开通", "b": "20"}, {"aa": "data2", "cnt": "魅力惠B3308", "b": "22"}, {"aa": "data2", "cnt": "魅力惠B3305", "b": "22"},{"aa": "data2", "cnt": "淘宝汇总", "b": "22"}, {"aa": "data4", "cnt": "你好a", "b": "22"}, {"aa": "data4", "cnt": "你好b", "b": "22"}])# print(df_tmp)# pandas默认排序--仍为乱序df_tmp.sort_values(by="cnt", inplace=True)print(df_tmp)# 获取dataframe指定列数值,并以列表形式返回sort_values_list = df_tmp[:]["cnt"].values.tolist()# 中文排序new_list = sorted(sort_values_list, key=to_pinyin)# print(new_list)# 自定义排序 (先取列内容 去重,按给定顺序排序)df_tmp['cnt'] = pd.Categorical(df_tmp['cnt'], categories=new_list, ordered=True)df_tmp.sort_values(by='cnt', inplace=True)# 重置行序号 indexdf_tmp.reset_index(drop=True, inplace=True)print(df_tmp)'''aa cnt b0 data2 魅力惠B3305 221 data2 魅力惠B3308 222 data4 你好a 223 data4 你好b 224 data2 淘宝汇总 225 data1 总开通 20'''
最后说明:
pandas默认的排序,不支持中文拼音排序,如果使用中文拼音排序需要自定义,
支持:纯中文 + 数字 + 纯大/小写字母 或 可接受大写在前小写在后的字母排序
不支持:小写字母在前,大写在后
目前原因:在ASCII码里,大写字母数值较小,小写字母数值较大
如有解决者,请联系告知,谢谢
pandas实现中文排序相关推荐
- Java对象排序、中文排序、SortedSet排序使用和源码讲解
在C.C++中有很多排序算法,但是通常排序算法不得不让程序员在写代码的过程中陷入对底层很多指针和位置的理解,Java不希望这样,所以排序大多可以由java帮你做掉,例如,你要对一个数组排序,就通过:C ...
- oracle登录账号和密码,oracle 登录账号与密码oracle按照中文排序
oracle按照中文排序 在oracle 9i之前,对中文的排序,是默认按2进制编码来进行排序的. 9i时增加了几种新的选择: www.2cto.com 按中文拼音进行排序:SCHINESE_PINY ...
- mysql order by 中文 排序
mysql order by 中文 排序 1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都 ...
- MySQL多字段排序乱_Mysql ORDER BY 中文排序错乱问题
1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都存在. 如果这个问题不解决,那么MySQL ...
- java 实现中文排序,Java自定义比较器实现中文排序
compareTo 方法 compareTo()是两个字符串对象比较大小,返回一个整数值,如果调用字符串对象大,返回正整数,反之,返回负整数.相等则返回0.compareTo()是两个字符串对象按AS ...
- sql排名名次分页mysql_mysql 实现排名及中文排序实例[分页累加行号]
/*排名相同情况下,优先按姓名排序*/ SELECT t.`name`, t.company_name, @rownum:=@rownum+1 as rankNum, t.ss from ( SELE ...
- Sqlite中文排序
Sqlite是一个用C语言实现的小型SQL数据库引擎.它体积小巧但功能强大,对硬件资源要求很低而且性能表现卓越,非常适合于嵌入式应用环境. 最近发现sqlite并不支持中文(拼音/笔画)排序,而这个功 ...
- python汉字排序_【IT专家】Python中文排序(转载)
本文由我司收集整编,推荐下载,如有疑问,请与我司联系 Python 中文排序(转载) 2012/02/02 3793 Python 比较字符串大小时,根据的是 ord 函数得到的编码 值.基于它的排序 ...
- python汉字排序规则_Python 中文排序
我找到最全的数据是slowwind9999上传到csdn的unicode汉字编码表,包括全部20902个汉字的全拼.五笔.郑码.UNICODE.GBK.笔画数 部首,以及笔顺编号(拼音部分没有音调,而 ...
最新文章
- mysql 存储过程 定时_MySQL存储过程和定时任务
- oracle自带split函数_Pandas 基本使用(三) — DataFrame.to_dict() 函数基本使用
- as和强制类型转换的区别
- java 皮鞋_java反射
- Android gradlew 多渠道打包
- Libvirt虚拟机的Qos与Cgroup
- 2014.7.7模拟赛【无线通讯网】
- 尝试:以下矩阵size length ndims repmat isempty ismatix E=A(:,[1:3:5])什么意思?
- c语言实验二作业,C语言实验作业8 - osc_5p0xffsa的个人空间 - OSCHINA - 中文开源技术交流社区...
- htcd816+android密码,详细的HTC Desire 816解锁教程
- 计算机三级考点3:构建宽带城域网的基本技术与方案。
- 网络攻防|一次实战中的向日葵 RCE Bypass 360
- word如何插入超链接
- 计算机键盘上的每一个按键编码,键盘按键修理
- 第六章 (数据库) 第3节 数据库高级
- php接口统计,EKL PHP 调取_search接口查询登录统计
- 手机怎么压缩证件照大小?这样压缩太简单
- 攻防世界misc——misc1
- C# 封面图片生成器
- 重装系统后发现只有系统盘c盘怎么办?
热门文章
- python输出文本居中_#python PIL ImageDraw text 文本居中#
- 计算机哈佛型体系结构,用于计算机体系结构教学哈佛体系结构模拟器.doc
- (转载)关于软件平台的定义
- (转)儒学之忠,学以致用
- 电子电路和芯片中的各种xVDD和xVCC和xVss的具体的分析
- 微服务定时任务 莫名其妙全部死掉的原因 @Scheduled(cron = 0 */1 * * * ?)
- 跟着鬼哥学so修改,三,作业篇
- 凯哥自媒体赚钱秘籍:百家号怎么快速做爆文?
- 【现货】AP6317 同步3A锂电充电芯片 带短温度保护
- 东方财富网新版A股数据爬取