【Python数据处理】近期在数据处理上遇到的一些问题归纳

5 篇文章 0 订阅
4 篇文章 0 订阅

1.pandas中强制类型转换

场景:在爬虫获取完成数据并且写入csv文件中后,读取数据发现数据类型是object类型。object类型是泛类型数据,在未进行强制转换前,price无法参与运算并且报错(unsupported operand type(s) for /: ‘str’ and ‘int’),原因是price中的非浮点型数据导致报错。而脏数据的产生是因为爬虫爬取过程中,由于ajax加载慢而导致。
在这里插入图片描述


刚开始想尝试astype方法进行强制类型转换,但是由于有字符串数据存在,所以无法使用。

sourceData['price'] = sourceData['price'].astype(float)

报错:could not convert string to float

还有一种情况是将浮点型转换成字符串类型,这样直接使用astype(str)即可


经过查阅,这里要使用另外一种强制类型转换的方法:

sourceData['price'] = pd.to_numeric(sourceData['price'], errors='coerce')

pandas.to_numeric(arg, errors=‘raise’, downcast=None)
将参数转换为数字类型。默认返回dtype为float64或int64, 具体取决于提供的数据。使用downcast参数获取其他dtype。如果传入非常大的数字,则可能会导致精度损失。这里将errors置为‘coerce’,是将字符串设置为NaN,经过转换后就变成了float64类型的数据了~

在这里插入图片描述


2.过滤掉文本中的中文

场景:在获取网页源码的过程中,由于emoji表情或者是其他的标点符号导致csv文件文本中出现乱码,由于我需要对所有的评论进行分词处理,所以需要过滤掉这些中文乱码。

在这里插入图片描述
使用的是python内置函数ord(),因为中文的Unicode数值会超过256,而且ord()不会对空格产生影响,所以有了以下代码(当然也希望你能有更好的方法):

def filter_zh(reviews):
    s = ''
    for i in reviews:
        if ord(i)>256:
            i = ' '
        s += i
    return s

3.pandas中筛选需要的值,和过滤掉不需要的字段。

场景:在很多商品标题中,拿口红为例子,有dior 有 ysl 有 mac等等,那我们要怎么根据自己的需求筛选出来呢?

筛选需要的数据(只需要mac):

word = 'mac'
# case = False则不忽略大小写
df = sourceData.loc[sourceData['title'].str.contains(word, case=False)]

过滤掉标题中不需要的色号:

color = '925'
colorData = sourceData.loc[sourceData['title'].str.contains(color, case=False)]
colorList = colorData['title'].tolist()
df = sourceData[~sourceData['title'].isin(colorList)]

这样就可以快速的过滤掉不要的数据了,之前过滤的话我是使用相加去重的方法,感觉会更麻烦。
如果有更好的方法!欢迎留言!!


4.由于数据类型引发的惨案:在对数据比较大小时没有将数据转换成int或者float类型。

场景:在写爬虫程序的时候有时候为了方便,会将一些数据处理过后再写入,但是在爬取了一周的数据后,发现数据不对,检查发现,程序处理数据出现了问题。所以建议对在爬去数据前对数据检查无误后再去爬取数据。

首先获取到的数据是字符串类型的,
“16 * 12 * 3.5 inches”,分表代表长宽高,
我需要得到长和宽计算画布的面积,
但是由于这个数据是卖家自己填写,
有时候是高长宽“3.5 * 16 * 12 inches”
首先需要替换掉inches和*使用replace方法即可,然后使用split切片,
split切片后返回了一个列表,
然后使用min()函数找出最小值然后再remove掉就可以得到长和宽。

可是就是在这里!!在切片后没有进行将字符串类型转换成浮点型,导致min()函数判断出来的最小值不是3.5,以至于很多获取下来的尺寸都是不对的…


这些小方法就分享到这里,后续如果有更好的方法以及更多的案例,会积极分享给大家。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值