用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 = ...
随机推荐
- JMeter Nmon Tool V2.0 插件
很早之前宝路已将nmon监控功能集成到了JMeter中,自己在使用旧版本时,也有诸多不满意的地方.趁着五一假期(基本都是晚上,白天要陪孩子),对插件底层代码进行了重构,自己还要反复测试调整,最晚的一次 ...
- 手把手教你使用ADB卸载手机内置App软件
[一.前言] 不知道你们有没有那么一段黑暗时期,刚买个手机,手机上内置一堆app,还卸载不掉,然后每天各种广告,手机一共1G的运行内存,那些流氓app还要再占走一些内存,真是让人欲哭无泪啊,后来我就学 ...
- Lowest Common Ancestor of a Binary Search Tree(树中两个结点的最低公共祖先)
题目描述: Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in ...
- 【MIT6.828】centos7下使用Qemu搭建xv6运行环境
title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. ...
- 字典树变形 A - Gaby And Addition Gym - 101466A
A - Gaby And Addition Gym - 101466A 这个题目是一个字典树的变形,还是很难想到的. 因为这题目每一位都是独立的,不会进位,这个和01字典树求最大的异或和是不是很像. ...
- (技能篇)Mysql在linux下的全量热备份
相关命令: #创建备份目录 mkdir -p /mysqlbackup #进入创建的备份目录中 cd /mysqlbackup #如果mysql运行在mysql用户和用户组下面,root表示用户,my ...
- java基础篇 之 再探内部类跟final
之前写过一篇文章:从垃圾回收机制解析为什么局部内部类只能访问final修饰的局部变量以及为什么加final能解决问题,经过这两天的学习,发现有些不对,必须再来捋一捋 先看之前的例子: /** * @a ...
- FOC中的Clarke变换和Park变换详解(动图+推导+仿真+附件代码)
文章目录 1 前言 2 自然坐标系ABC 3 αβ\alpha\betaαβ 坐标系 3.1 Clarke变换 3.2 Clarke反变换 4 dqdqdq 坐标系 4.1 Park变换 正转 反转 ...
- Linux设备模型之kobject
阿辉原创,转载请注明出处 参考文档:LDD3-ch14.内核文档Documentation/kobject.txt,本文中使用到的代码均摘自Linux-3.4.75 ----------------- ...
- Centos 编译带调试信息的libevent
libevent编译过程 查看libevent文档即可 解决cmake编译出来的可执行文件没有调试信息(该方法未实验,暂时对cmake不熟悉) SET(CMAKE_BUILD_TYPE "D ...