前言

熟读 Python 基本数据结构,但实际应用时却大脑短路,无法解决问题?

熟悉 pandas ,但遇到没有内置的方法,就不知所措?

如果你有这种情况,那么你缺少的是解决问题的思路。

经常向我提问的同学应该知道,我一般不会直接给出代码,而是给你提供思路。本系列主打思路,基于同一思路,给出多种不同的解决方案,让你举一反三解决问题。


问题

有位小伙伴提了一个简单的问题,数据如下:

  • 我希望把列"key1,2,3"调整到表头的最左边,其他的列顺序我不关心
  • 别让我把所有列名写出来,因为我有些表可能有几十上百的列

前提

我们需要知道一些前提知识。

pandas 中怎么指定列顺序?非常简单:

  • 往 df[] 中指定多个列名的 list 即可
  • 显然,提问者就是不希望手工输入所有的列表

pandas 中怎么获取表的所有列名:

  • df.columns 即可。
  • 如果希望得到列表,只需要 list(df.columns) 即可

如何拼接 Python 中的2个列表:

理解这两点后,现在的问题其实不是什么 pandas 或 啥表头的顺序问题,而是一个列表构造问题:

  • 行4:是解决问题的关键

接下来,基于这些前提条件和思路,看看能做出多少种解法


解法1

这是最直接的方式:

  • 行4-7:遍历所有列,把非目标列名去掉即可

如果你不熟悉推导式,也可以用 for in 遍历

"我不懂啥推导式呀,遍历也用得不熟悉,有没有不用遍历的方式?"


解法2

"Python 不是一直声称语法简单吗,为什么不可以把 2 个列表相减,就得到剩余列名?"

这想法还挺有道理的,为什么不呢?

因为列表中的元素是可以重复的,如果 2 个列表能相减,他就要考虑有重复元素与没有重复元素的歧义

因此,列表是不能相减,但是 Python 中的确有一种东西与列表相似,但他里面的元素不能重复—— set(集)

由此我们可以得到第二种解法:

  • 行4:用 set 函数得到 set 结构,即可相减。
  • 为什么需要在外面再套一个 list 呢?因为下一步我们需要使用 "列表相加" 的骚操作

细心的你可能注意到,出来的结果中,其他列的顺序与解法1不一样!

因为 set 是不关心元素顺序的,2 个 set 相减后,顺序变化了

"有没有不同遍历,有可以保留其他列的原始前后顺序的?"


解法3

前面的解法,本质上都在做去重工作。pandas 中不也有去重功能吗,我们也可以用上。

  • 行4:pd.Series 中传入有重复元素的列表,就能返回一个 Series。使用他的去重方法即可完成

"有问题啊,new_cols 是列表?,不应该是一个 Series 吗?为什么 df[一个Series] 也能改变列顺序?"

实际上,df[] 里面可以接受大多数序列,比如 set 或 numpy 的数组等等,唯独元组不行

这涉及到多层索引的东西,超纲了,可参考 pandas 专栏第3节内容:

python set没有顺序_Python一题多解学思路:指定列前置相关推荐

  1. python菜单怎么做_Python 城市菜单详解(超详解)

    print("--------城市查询系统---------") print("--------按数值进行查询--------") menu={"内蒙 ...

  2. python 打印皮卡丘_Python到底是什么?学姐靠它拿了5个offer

    你ZAO吗? 最近陌陌发布了一款很有意思的产品--ZAO,这款AI换脸的产品刷爆朋友圈! 这款产品火爆到什么程度呢? 正在使用ZAO的用户会发现,想要生成一段新的AI换脸视频,已经不是等待几秒.排队第 ...

  3. python列表按照指定顺序排序-Python3实现对列表按元组指定列进行排序的方法分析...

    本文实例讲述了Python3实现对列表按元组指定列进行排序的方法.分享给大家供大家参考,具体如下: Python版本: python3.+ 运行环境: Mac OS IDE: pycharm Pyth ...

  4. python贪婪匹配顺序_Python正则表达式:贪婪模式返回多个空匹配

    这种模式仅意味着将字符串中的所有内容抓取到数据中第一个潜在句子边界为止: [^\.?!\r\n]* 输出: >>> pattern = re.compile(r"([^\. ...

  5. python属性访问顺序_Python 对象属性的访问

    在 Python 中,一切皆对象.属性访问可以理解为是从一个已有的对象中获得另一个对象的方法.对象属性的访问涉及到对象的 __dict__ 属性.描述符等概念,以及 __getattribute__. ...

  6. python搜索路径顺序_Python module之搜索路径

    最近,好多事,新学期课又是出奇的多,于是我就好久没更新了,今天周末,我决定将最近的学习所得整理一下,POST上来. 首先是,最近一直在做有关web开发的事,所以最近几篇主要关于django框架的使用, ...

  7. python编程工时计算_Python编程题:两个日期间的天数统计(附代码)

    编程题一:计算两个日期之间的天数 题目如下: 题目一 解题思路: 将两个日期格式化成time模块中的标准时间结构struct_time,缺少值用0补齐利用time模块函数分别计算两个日期到时间戳(指格 ...

  8. python函数执行顺序_python下for循环接if判断的函数执行顺序

    如题,程序第4行开始,for循环接if判断,之后的name=self._nic_ovs_name_pattern.search(o) 指的是if条件判断返回true才执行赋值操作吗?还是if返回Fal ...

  9. python多重继承初始化顺序_Python 多重继承顺序

    本文借鉴自 http://www.cnblogs.com/panyinghua/p/3283726.html 当类有多个超类,而且超类中有相同的方法时,继承顺序就很重要,如下: class A (de ...

最新文章

  1. debugger 调试的一些经验
  2. windows备份与还原和两个主机的相互通信
  3. Phpstorm 9 关闭拼写检查
  4. 更好用的集群限流功能,Sentinel 发布 v1.4.2
  5. Windows操作系统启动介绍(二)
  6. C语言之程序中内存的来源:栈 堆 数据段
  7. 每天学一点flash(11) as3.0 与asp 通信 (1)
  8. Echo团队Alpha冲刺随笔 - 第八天
  9. 电脑仙人掌机器人作文_暑假有空来练笔——2019各地小学期末作文题目集锦
  10. uniapp小程序优化和减小代码体积的方式
  11. python 生成wifi密码字典_python生成密码字典的方法
  12. wps 甘特图_强烈推荐5款在线甘特图工具,又简单又清爽又好用
  13. 模拟电子技术基础(第四版)教材 电子版
  14. 基于hilbert变换的数字信号_基于Hilbert变换数字调相信号解调算法研究.doc
  15. spring data JPA的使用
  16. 真!一文搞定 HTTP 和 HTTPS
  17. hive日期函数,求日期差等,datediff,date_add,date_sub,add_months
  18. C语言中狐狸找兔子的问题
  19. 视频直播网站源码,uniapp页面跳转的几种方法和区别
  20. win7创建任务计划:自动关机命令

热门文章

  1. vue-awesome-swiper
  2. Spring Cloud Zuul
  3. 前端开发工程师如何在新的一年里提升自己
  4. 怎样Selenium IDE选择combo box中值
  5. 微软发布了云Bot-as-a-Service平台
  6. 对于数据库中表示状态或类型字段表示方法的思考
  7. PHP解析JSON数据的源代码
  8. linux curl 命令模拟 http get post 请求
  9. linux shell 布尔运算
  10. windows下nginx安装、配置与使用