用pandas处理数据遇到的坑
1.使用pandas.read_csv(filePath)方法来读取csv文件时,可能会出现这种错误:
ParserError:Error tokenizing data.C error:Expected 2 fields in line 407,saw 3.
这句话的意思是,在csv文件的第407行数据,期待2个字段,但在第407行实际发现了3个字段。
原因:header只有两个字段名,但数据的第407行却出现了3个字段(可能是该行数据包含了逗号,或者确实有三个部分),导致pandas不知道该如何处理。
解决办法:把第407行多出的字段删除,或者通过在read_csv方法中设置error_bad_lines=False来忽略这种错误:
改为
pandas.read_csv(filePath,error_bad_lines=False)
来忽略掉其中出现错乱(例如,由于逗号导致多出一列)的行。
2.KeyError错误:
报这种错是由于使用了DataFrame中没有的字段,例如id字段,原因可能是:
1.csv文件的header部分没加逗号分割,此时可使用df.columns.values来查看df到底有哪些字段:
print(df.columns.values)
2.在操作DataFrame的过程中丢掉了id字段的header,却没发现该字段已丢失。
例如:
df=df[df['id']!='null']#取得id字段不为null的行
df=df['id']#赋值后df为Series,表示df在id列的值,而不再是一个DataFrame,于是丢掉了id的头,此时若再使用df['id']将报错。
3.取列的值,与取列的区别:
df=df['id']#取id列的值,赋值后df为Series类型,可用print(type(df))来查看其类型
df=df[['id']]#只取df的id列作为一个新的DataFrame,赋值后df仍然是一个DataFrame
df=df[['id','age']]#取df的id和age列作为一个新的DataFrame,赋值后df仍然是一个DataFrame
4.过滤行
df=df[df['id']!='null']#过滤掉id字段取值为'null'的行
注意,此处的'null'是一个字符串,若df中某行id字段的值不是字符串型,或者为空,将报TypeError:invalid type comparison错,因为只有相同类型的值才能进行比较。
解决办法:如果不能保证id列都是string类型,则需要去掉该过滤条件。
5.列值的集合: df['col_name'].values
想实现取某一行的值并加入到一个集合中去(还有很多其他csv也有这个列,因此没有使用df.drop_duplicates()方法),达到去重的效果,因为对pandas不熟,没有想到特别好的方法,最后这样实现的:
id_set=set()
for id in df['id'].values:
id_set.add(id)
此法效率应该不高,若读者有更好的方法,可留言告知,谢谢。
6.指定列的去重
可参考: https://www.cnblogs.com/everfight/p/pandas_to_list.html
用pandas处理数据遇到的坑的更多相关文章
- 在PyQt5中使用Pandas时的几个坑
最近在看Python GUI编程,在用到PyQt5+Pandas时遇到一些问题.这里把问题和解决方法整理一下.备查. (好像不能上传附件,内容只好写在下面了.) 在PyQt5中使用Pandas时的几个 ...
- 利用Python进行数据分析(12) pandas基础: 数据合并
pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...
- 【转载】使用Pandas对数据进行筛选和排序
使用Pandas对数据进行筛选和排序 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas对数据进行筛选和排序 目录: sort() 对单列数据进行排序 对多列数据进行排序 获取金额最小前10项 ...
- 【转载】使用Pandas进行数据提取
使用Pandas进行数据提取 本文转载自:蓝鲸的网站分析笔记 原文链接:使用python进行数据提取 目录 set_index() ix 按行提取信息 按列提取信息 按行与列提取信息 提取特定日期的信 ...
- 【转载】使用Pandas进行数据匹配
使用Pandas进行数据匹配 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas进行数据匹配 目录 merge()介绍 inner模式匹配 lefg模式匹配 right模式匹配 outer模式 ...
- 【转载】使用Pandas创建数据透视表
使用Pandas创建数据透视表 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas创建数据透视表 目录 pandas.pivot_table() 创建简单的数据透视表 增加一个行维度(inde ...
- Pandas 把数据写入csv
Pandas 把数据写入csv from sklearn import datasets import pandas as pd iris = datasets.load_iris() iris_X ...
- pandas学习(数据分组与分组运算、离散化处理、数据合并)
pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 ...
- Pandas DataFrame数据的增、删、改、查
Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...
随机推荐
- 03_CSS入门和高级技巧(1)
上节课知识的复习 插入图片,页面中能够插入的图片类型:jpg.jpeg.bmp.png.gif:不能的psd.fw. 语法: <img src="路径" alt=" ...
- Linux开机自启动脚本的总结
一.在/etc/rc.local中添加 如果不想将脚本粘来粘去,或创建链接什么的, 则: step1. 先修改好脚本,使其所有模块都能在任意目录启动时正常执行; step2. 再在/etc/rc.lo ...
- Spring中bean的四种注入方式
一.前言 最近在复习Spring的相关内容,这篇博客就来记录一下Spring为bean的属性注入值的四种方式.这篇博客主要讲解在xml文件中,如何为bean的属性注入值,最后也会简单提一下使用注解 ...
- Mysql常用sql语句(16)- inner join 内连接
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 利用条件表达式来消除交叉连接(cross joi ...
- Nginx下的location,upstream,rewrite 和 proxy_pass使用总计大全
一 . location: 顾名思义-->地址,也叫路由. nginx服务器非常核心的配置,一般nginx运维人员在修改nginx配置时,大部分也是围绕着location这个配置进行修改. 下面 ...
- Java元注解@Retention规则
@Retention是java当中的一个元注解,该元注解通常都是用于对软件的测试 1.适用方式: @Retention(RetentionPolicy.RUNTIME) @interf ...
- ThinkPad BIOS
ThinkPad-BIOS 如有问题指出 ~谢谢
- Zookeeper入门一篇就够了
谈点分布式 什么是分布式呢? 起初,我们的应用流量比较小,所有东西全部部署在一个服务器,比如全部丢给一个tomcat来处理,顶多做一个tomcat的多节点部署多分,再挂一台Nginx做一下负载均衡就O ...
- java -类加载器与反射
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. l 加载 就是指将class文件读入内存,并为之创建一个Class ...
- JS异步之宏队列与微队列
1. 原理图 2. 说明 JS 中用来存储待执行回调函数的队列包含 2 个不同特定的列队 宏列队:用来保存待执行的宏任务(回调),比如:定时器回调.DOM 事件回调.ajax 回调 微列队:用来保存待 ...