Python学习日记 |
您所在的位置:网站首页 › python操作http › Python学习日记 |
问题
在利用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 |