Python学习日记

您所在的位置:网站首页 python操作http Python学习日记

Python学习日记

2023-03-12 08:46| 来源: 网络整理| 查看: 265

问题

在利用pandas进行数据处理的过程中,遇到一列数据为列表类型,想要将数据拿到。

利用split进行分割有点墨迹,找到一种更好的办法来对数据进行处理,记录一下

数据

需要处理的数据如下

待处理的数据

数据处理

数据为爬取的图书销售数据,在价格一列是列表的类型,但实际类型是object类型

import pandas as pd df_data = pd.read_csv('result.csv') print(df_data["价格"])

输出:

0 ['¥134.10'] 1 ['¥26.00'] 2 ['¥35.60'] 3 ['¥55.00'] 4 ['¥34.00'] ... 21021 ['¥55.10'] 21022 ['¥134.30'] 21023 ['¥74.10'] 21024 ['¥168.30'] 21025 ['¥17.10'] Name: 价格, Length: 21026, dtype: object

首先将列中的每个列表字符串转化为列表格式,即将‘['¥10.30']’转化为['¥10.30']

df_data["价格"]=df_data["价格"].apply(eval)

利用apply对每一行数据进行eval操作,自动适配类型,结果如下:

0 [¥134.10] 1 [¥26.00] 2 [¥35.60] 3 [¥55.00] 4 [¥34.00] ... 21021 [¥55.10] 21022 [¥134.30] 21023 [¥74.10] 21024 [¥168.30] 21025 [¥17.10] Name: 价格, Length: 21026, dtype: object

然后将列表格式的列进行拆分,拆分结果为一个元素一列,即将‘['¥10.30,'10.2']’转化为¥10.30 10.2

df_data=df_data.explode("价格") print(df_data["价格"])

输出结果如下:

0 ¥134.10 1 ¥26.00 2 ¥35.60 3 ¥55.00 4 ¥34.00 ... 21021 ¥55.10 21022 ¥134.30 21023 ¥74.10 21024 ¥168.30 21025 ¥17.10 Name: 价格, Length: 21026, dtype: object 其他数据处理

顺便介绍一下其他列的数据处理方法

1、去空

去空分为dropna和drop两种:

#去除价格为空的行 df_data=df_data.dropna(subset=['价格']) df_data=df_data.drop(df_data[df_data['评论数']==''].index) 2、类型转换

应用astype函数:

# #转化列的类型 # df_data['价格']=df_data['价格'].astype(float) 3、分割字符串

分割字符串并获取到第一位

df_data['出版时间']=df_data['出版时间'].str.split('-',expand=True)[0] 结果

最后是处理后的数据

完整代码:

import pandas as pd df_data = pd.read_csv('result.csv') print(df_data["价格"]) #将列中的每个列表字符串转化为列表格式,即将‘['¥10.30']’转化为['¥10.30'] df_data["价格"]=df_data["价格"].apply(eval) print(df_data["价格"]) #将列表格式的列进行拆分,拆分结果为一个元素一列,即将‘['¥10.30,'10.2']’转化为¥10.30 10.2 df_data=df_data.explode("价格") print(df_data["价格"]) df_data['价格']=df_data['价格'].str.replace('¥','') df_data['价格']=df_data['价格'].str.replace(',','') df_data['评论数']=df_data['评论数'].str.replace('条评论','') df_data['推荐度']=df_data['推荐度'].str.replace('%推荐','') #去除价格为空的行 df_data=df_data.dropna(subset=['价格']) df_data=df_data.drop(df_data[df_data['评论数']==''].index) #转化列的类型 df_data['价格']=df_data['价格'].astype(float) #分割字符串并获取到第一位 df_data['出版时间']=df_data['出版时间'].str.split('-',expand=True)[0] print(df_data["价格"]) df_data.to_csv('clean.csv')

有不足之处希望可以有大佬指点



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3