“pandas”的坑

参考:百度安全验证

本文基于python第三方数据分析库pandas,分享这几天所遇到的3个爬坑的案例,希望对也在爬坑的同学们尽一份绵薄之力,如有错误或者写得不好的地方,烦请指正,谢谢。

01df中startswith的坑

这两天我在工作中碰到一个非常奇葩的情况,简单来讲需求大概是这个样子:

两个数据集合,需要联合后,查询某两个特殊字段是否是包含的关系,如果包含则输出1,否则输出0

需求的意思大概如下所示

按理说,上图应该正常会生成新的列tmp,但是,发生了如下的事情,上图

说startswith函数不能以float函数开头,直接给我整懵逼了,我这上面明明就已经设置了数据类型为str类型了,怎么拼接完又变成float类型了。

于是我就验证clsid 和cls字段在读取文件后的数据类型,发现是string,没有问题。然后又检查了拼接后的这两个字段,也都是string,也没有问题。那么就神奇了,明明都是string,但是却显示不能以float开头

没办法,只能对数据集合做修改,修改如下

这样便正常了,你说坑不坑!

02csv文件读和写的坑

读文件相关

建议读取csv文件,最好带有列的类型属性,pandas遇到这种"0100"的,会自动变更为int类型,建议代码如下

不指定数据类型

指定数据类型但是却有nan值

写文件相关

需求描述

在向指定路径写文件(df.to_csv())时,遇到过一个追加写的问题,大概意思是:程序跑完,正常来讲应该有两次往同一个文件写日志,但是后面需求变动为程序跑完。有可能出现只写一次或者一次都不写的情况问题在利用pandas接口写文件,要么带列名,要么不带列名,你需要判断此次的写文件属于第一次写(覆盖写)还是第二次写(追加写),来决定是否需要加列名写文件解决方案

03遍历相关(iterrows)

使用df.iterrows()循环数据集合

datdaframe.iterrows()是返回迭代器,一般是用for语句调用, 返回为当前df所在行索引以及那一行具体数据用for循环调用取值,不可以直接把当前行的数据进行计算,应该把要计算的数据用变量先接收,再进行整合计算索引在你需要更改df的某一列的值时特别好用

使用df.values()循环数据集合

用for循环每一行会生成一个列表,方便的是可以用列表的命令操作,一般用于对数据的处理和集成,相比较iterrows来说,可能唯一的好处是可以根据列表方法对数据进行操作

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值