Python学习日记-Pandas操作(处理列表类型的列)

问题

在利用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')

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很高兴为您服务,以下是十篇关于 Python 工作日记: 1. 今天工作主要是在 Python处理数据。我学习了如何使用 Pandas 模块来读取和操作 CSV 文件,这对于数据的处理和分析非常有用。 2. 今天有一个需求是从 Excel 表格中提取数据,我使用了 openpyxl 模块来读取 Excel 文件,并将提取的数据导入到数据库中。这个模块对于操作 Excel 文件非常方便。 3. 我今天使用了 Flask 框架创建了一个 Web 应用程序,它可以从数据库中获取数据并将其显示在网页上。Flask 的使用非常简单,我花了很少的时间就完成了这个应用程序。 4. 我今天在 Python 中使用了线程和进程来处理并发问题。我学习了如何使用 threading 和 multiprocessing 模块来创建和管理线程和进程,这对于提高程序的性能非常有用。 5. 今天我使用了 Requests 模块来发送 HTTP 请求。我学习了如何使用这个模块来发送 GET 和 POST 请求,并且了解了如何解析返回的 JSON 数据。 6. 这个星期,我一直在写一个爬虫程序,用于从网站上爬取数据。我使用了 Requests 和 Beautiful Soup 模块来处理网页和提取数据。这个程序对于我分析竞争对手非常有用。 7. 今天我学习了如何使用 Matplotlib 模块来创建图表和绘制图形。这个模块对于数据可视化非常有用。 8. 我今天写了一个小程序,用于对图片进行处理。我使用了 Pillow 模块来裁剪、旋转和调整图片的大小。这个程序非常有用,可以自动化处理大量图片。 9. 我今天使用了 Tweepy 模块来发送 Twitter 消息。我了解了如何通过这个模块来认证和访问 Twitter API,并且了解了如何发送消息和获取数据。 10. 我今天使用了 NumPy 和 SciPy 模块进行数学计算和科学计算。这些模块对于处理大量数值数据非常有用,可以进行高效的计算和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_892532969

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值