将Dataframe里面某一列的类型从list转换为int##[‘xx分钟‘] -> xx

在处理数据时,作者遇到将DataFrame中list类型的数值转换为int的问题。通过正则表达式移除中文字符,然后应用pd.to_numeric转换列表中的数字。在遍历过程中遇到'list index out of range'错误,发现存在空值。通过使用apply函数处理空值后,最终成功将数据转换为int类型。
摘要由CSDN通过智能技术生成

今天在对爬下来的数据进行处理的时候,遇到一个问题,就是我想将dataframe里面某一列类型从list转换为int,即以下形式:

##['238分钟'] -> 238

就出现了一系列匪夷所思的问题,真的让我焦头烂额,这里先感谢一下岚哥,帮我debug了一下查出了错误(真的,程序员确实要学会自己找错误哈哈哈。)

首先,第一步当然是要把中文字给他去掉,然后只保留数字,运行下面代码即可实现:

pattern = '\d+'#只要数字
import re
data_item['runtime'] = data_item['runtime'].astype(str).str.findall(pattern)

这样,我们就可以把结果转换成:

##['238分钟'] -> ['238']

第二步,我这里的思路是将这一列表里的值先取出来,转换成int类型,然后赋值给原来的变量。话不多说,have a try:

data_item.runtime = data_item.runtime.apply(lambda y: ['0'] if len(y)==0 else y)
for  i in range(len(data_item)):
    data_item['runtime'][i] = pd.to_numeric(data_item['runtime'][i][0]).tolist()

三行代码,也就花了三天吧......


讲一下代码的来历。

根据上述的思路,那么首先最简单能想到的就是直接来一个遍历。

for  i in range(len(data_item)):
    data_item['runtime'][i] = pd.to_numeric(data_item['runtime'][i][0]).tolist()

 简单说一下函数的调用。

 pd.to_numeric()

pandas.to_numeric(arg, errors='raise', downcast=None)   

将参数转换为数字类型。

默认返回dtypefloat64int64, 具体取决于提供的数据。

df.tolist()

Pandas的tolist()函数用于将一个系列或数据帧中的列转换为列表。

没错,这个时候未知错误出现了......

 ##列表超出范围

IndexError: list index out of range

 没关系,我们不妨debug一下,加一个输出

for i in range(len(data_item)):
    data_item['runtime'][i] = pd.to_numeric(data_item['runtime'][i][0]).tolist()
    print(i)

结果如下:

0
1
2
3
4
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_20556/2781337417.py in <module>
     22 # data_item.runtime = data_item.runtime.apply(lambda y: ['0'] if len(y)==0 else y)
     23 for  i in range(len(data_item)):
---> 24     data_item['runtime'][i] = pd.to_numeric(data_item['runtime'][i][0]).tolist()
     25     print(i)
     26 #     data_item['runtime'][i] = data_item['runtime'][i][0].astype('int64')

IndexError: list index out of range

我们不难发现,i到4就停止了,经过查询后发现,真相只有一个,data_item['runtime'][5]是个空的。

好吧,那么接下来就是要对缺失值进行补全,这里将所有缺失值补充为0

data_item.runtime = data_item.runtime.apply(lambda y: ['0'] if len(y)==0 else y)

补全之后,重新运行代码,结果如下

0        114
1        114
2         83
3        165
4         90
        ... 
11784     14
11785    108
11786     96
11787     15
11788     66
Name: runtime, Length: 11789, dtype: object

成功!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值