Pandas有一些不频繁使用容易忘记的小技巧

1、将不同Dataframe写在一个Excel的不同Sheet,或添加到已有Excel的不同Sheet(同名Sheet会覆盖)

  1. from pandas import ExcelWriter
  2.  
  3. #在单个文件中不同df写入对应不同的的工作表
  4. with ExcelWriter('path_to_file.xlsx') as writer:
  5. df1.to_excel(writer, sheet_name='Sheet1')
  6. df2.to_excel(writer, sheet_name='Sheet2')
  7.  
  8. #附加到已有的Excel文件
  9. with ExcelWriter('path_to_file.xlsx', mode='a') as writer:
  10. df.to_excel(writer, sheet_name='Sheet3')

2、建立索引,修改索引,重建索引,删除索引,索引---->列,列---->索引

  • 建立索引  列---->索引
  1. import pandas as pd
  2.  
  3. #DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
  4.   #key:标签或者数组(Series, Index,np.ndarray),复合索引则把标签或数组放在list中
  5.   #drop:删除作为新索引的列
  6.   #append :将列附加到现有的索引
  7.   #inplace :是否修改Dataframe
  8.  
  9. df = pd.DataFrame({'month': [1, 4, 7, 10],
  10. 'year': [2012, 2014, 2013, 2014],
  11. 'sale': [55, 40, 84, 31]})
  12. #列转索引
  13. df.set_index('month')
  14.  
  15. #多列转复合索引
  16. df.set_index(['year', 'month'])
  17.  
  18. #设置列与另一索引为复合索引
  19. df.set_index([pd.Index([1, 2, 3, 4]), 'year'])
  20.  
  21. #使用Series建立索引
  22. s = pd.Series([1, 2, 3, 4])
  23. df.set_index([s, s**2])
  • 重建/删除索引    索引---->列
  1. #原索引转列,重建递增索引
  2. df.reset_index()
  3.  
  4. #删除原索引、重建默认递增索引
  5. df.reset_index(drop=True)
  6.  
  7. #行多索引子索引转列多索引的某一层级的列,默认为最高级,若插入其他等级,col_fill为指定最高级索引,若不存在,则创建
  1. df.reset_index(level='class', col_level=1, col_fill='genus')
  • 修改索引
  1. import pandas as pd
  2. import numpy as np
  3.  
  4. #DataFrame.reindex(labels = None,index = None,columns = None,axis = None,method = None,copy = True,level = None,
                fill_value = nanlimit = Nonetolerance = None)
  5. #reindex相当于对DataFrame的架构(index或者column)筛选或者补充,即如果原df存在相应的
  6. ##索引或列,就保留,没有则为NAN,函数有一系列填充NAN的方法(不止固定填充某值,非操作原始数据NAN)
  7.  
  8. index = ['Firefox', 'Chrome', 'Safari', 'IE10', 'Konqueror']
  9. df = pd.DataFrame({
  10. 'http_status': [200,200,404,404,301],
  11. 'response_time': [0.04, 0.02, 0.07, 0.08, 1.0]},
  12. index=index)
  13.  
  14. #重新索引行
  15. new_index= ['Safari', 'Iceweasel', 'Comodo Dragon', 'IE10','Chrome']
  16. df.reindex(new_index, fill_value='missing')
  17.  
  18. #重新索引列
  19. df.reindex(columns=['http_status', 'user_agent'])
  20.  
  21. #展示对索引中产生的NAN的填充功能
  22. date_index = pd.date_range('1/1/2010', periods=6, freq='D')
  23. df2 = pd.DataFrame({"prices": [100, 101, np.nan, 100, 89, 88]},index=date_index)
  24. date_index2 = pd.date_range('12/29/2009', periods=10, freq='D')
  25. df2.reindex(date_index2)
  26. #第一个有效值以填充之前的NaN值
  27. df2.reindex(date_index2, method='bfill')
  28.  
  29. #.reindex_like
  30. #等价于.reindex(index=other.index, columns=other.columns,...)

3、读取有BOM头的文档(Windows有的软件会在首行添加看不见的BOM头,导致文件处理出错)

  1. import pandas as pd
  2.  
  3. df=pd.read_csv("test.csv",sep="\t",encoding="utf-8-sig",engine="python")
  4.  
  5. #即编码改成有BOM头的即可

4、在Pandas读取csv的时候报 field larger than field limit (131072) 这样的错误

  •   从报错上来说,这是说字段大小超过限制了,但是一般来说,我们的字段通常是不会超过限制的,如果超过了,就应该反思数据结构是不是适合csv的格式了,所以除了这个,很有可能是解析的方式出了问题,我遇到过一个例子,通过改变Quote行为解决的
  1. import pandas as pd
  2.  
  3. df = pd.read_csv('test.csv',sep='\t',encoding='utf-8-sig',quoting=3)
  4.  
  5. #quoting:控制引用字符引用行为,QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3).
  •   但是如果csv的字段就是那么的大,可以使用下述DirtyCode进行拓展限制的处理
  1. import pandas as pd
  2.  
  3. maxInt =pd.io.parsers.sys.maxsize
  4. while True:
  5. try:
  6. pd.io.parsers.csv.field_size_limit(maxInt)
  7. break
  8. except OverflowError:
  9. #这里主要是因为Python的Int的大小是远大于C的,当不满足的时候,除以2
  10. maxInt = maxInt>>1

5、未完待续... ...

Pandas一些小技巧的更多相关文章

  1. js几个小技巧和坑

    蝴蝶书看了,也知道充满了毒瘤和糟粕,但该用还是得用. 实际写了几天,小技巧记录下来.都是在py里有直接答案,不会遇到的问题,没想到js里这么费事. 还是要多读<ES6标准入门> 1判断ob ...

  2. pandas常用小trick(持续更新)

    记录一下pandas常用的小技巧,时间长了干别的去了会忘记,记录一下: 1. 在处理数据过程中涉及到label和null的处理方法 # 方法一 df['height'][df.height < ...

  3. 今天整理了几个在使用python进行数据分析的常用小技巧、命令。

    提高Python数据分析速度的八个小技巧 01 使用Pandas Profiling预览数据 这个神器我们在之前的文章中就详细讲过,使用Pandas Profiling可以在进行数据分析之前对数据进行 ...

  4. 8条github使用小技巧

    1 简介 作为全球最大的开源及私有软件项目托管社区平台,github可以显著地帮助从事编程相关工作的人员提升自己的技术水平,也是费老师我日常最常浏览学习的技术类网站. github为了使得其使用更加便 ...

  5. 前端网络、JavaScript优化以及开发小技巧

    一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

  6. Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具

    前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...

  7. 分享两个BPM配置小技巧

    1.小技巧 流程图修改后发布的话版本号会+1,修改次数多了之后可能会导致版本号很高,这个时候可以将流程导出,然后删除对应的流程包再导入,发布数据模型和流程图之后,版本清零 2.小技巧 有的同事入职后使 ...

  8. linux系统维护时的一些小技巧,包括系统挂载新磁盘的方法!可收藏!

    这里发布一些平时所用到的小技巧,不多,不过会持续更新.... 1.需要将history创建硬链接ln 全盘需要备份硬链接 ln /etc/xxx /home/xxx 2.root用户不可以远程 /et ...

  9. JS处理事件小技巧

    今天,就分享一下我自己总结的一些JS的小技巧: ①防止鼠标选中事件 <div class="mask" onselectstart="return false&qu ...

随机推荐

  1. Jenkins introduction

    http://birdinroom.blog.51cto.com/7740375/1342897 https://www.ibm.com/developerworks/cn/java/j-lo-jen ...

  2. 解决php中redis client进行subscribe操作出现timeout的问题

    出现该问题的原因是poll设置接收超时所致,这个超时默认设置60s 设置Redis::OPT_READ_TIMEOUT配置项: 解决方法如下: <?php $redis = new Redis( ...

  3. centos7设置系统语言为中文

    centos7设置系统语言为中文 修改 /etc/locale.conf  文件内容为: LANG="zh_CN.GB18030" LANGUAGE="zh_CN.GB1 ...

  4. voliatilekeyword

    啃书的时候,发现了这个keyword. 曾经都没有听过.唉,我真是孤陋寡闻啊... C/C++ 中的 volatile keyword和 const 相应,用来修饰变量,通经常使用于建立语言级别的 m ...

  5. oracle exchange partition 測试

    Exchange partition提供了一种方式,让你在表与表或分区与分区之间迁移数据.注意不是将表转换成分区或非分区的形式,而仅仅仅是迁移表中数  据(互相迁移),因为其号称是採用了更改数据字典的 ...

  6. ArcGIS教程:面积制表

    摘要 计算两个数据集之间交叉制表的区域并输出表. 插图 使用方法 · 区域定义为输入中具有同样值的全部区.各区无需相连. 栅格和要素数据集都可用于区域输入. · 假设区域输入和类输入均为具有同样分辨率 ...

  7. 使用聚合数据的接口进行的RxAndroid学习

    Demo数据源是聚合数据的免费Api,地址:https://www.juhe.cn/ 配合Retrofit 完成数据请求 例子比较简单,没事使用什么复杂的操作符. 就是简单的网络数据获取. 一些常用的 ...

  8. 解决apt 依赖破损的问题

    在 安装 python3 / python2 共存的环境时, 不知道做了什么, 导致 apt 依赖故障 odoo@sy-odoo-08:~$ sudo apt-get remove apport 正在 ...

  9. Android开发之WebView具体解释

    概述: 一个显示网页的视图.这个类是你能够滚动自己的Web浏览器或在你的Activity中简单地显示一些在线内容的基础.它使用了WebKit渲染引擎来显示网页,包含向前和向后导航的方法(通过历史记录) ...

  10. 撸代码--linux进程通信(基于共享内存)

    1.实现亲缘关系进程的通信,父写子读 思路分析:1)首先我们须要创建一个共享内存. 2)父子进程的创建要用到fork函数.fork函数创建后,两个进程分别独立的执行. 3)父进程完毕写的内容.同一时候 ...