首页 > 解决方案 > 尽管尝试了我能找到的所有方法来删除有问题的行,但仍然出现“ValueError:无法将字符串转换为浮点数”

问题描述

我有一个包含数千万条记录的文件,其中包含每条记录的用户、项目和评分。评分是从网络上抓取的,最初是作为 HTML 抓取的,然后替换为相应的数字评分(例如,这是 5 星:

"<i style=""height: 16px; width: 16px;"" class=""rating__icon--2T9_0 rating__icon100--2vw_3""><i style=""height: 16px; width: 16px;"" class= ""rating__icon--2T9_0 rating__icon100--2vw_3""><i style=""height: 16px; width: 16px;"" class=""rating__icon--2T9_0 rating__icon100--2vw_3""><i style=""高度:16px;宽度:16px;"" class=""rating__icon--2T9_0 rating__icon100--2vw_3""><i style=""height: 16px; width: 16px;"" class=""rating__icon--2T9_0 rating__icon100 --2vw_3"">"

尽管它们最初被转换为文本值,而不是浮点数)。

此评级数据的目的是通过矩阵分解模型运行它,并输出推荐。为此,我需要将评级的文本值转换为数值(具体来说是浮点数,因为评级增加了 0.5)。我之前已经用数字的相应文本版本(0.5、1、1.5 等)替换了所有 HTML 版本(或者至少认为我有),但是当尝试将评级转换为浮点数时,我得到以下错误:

ValueError: could not convert string to float: '<i style="height: 16px; width: 16px;" class="rating__icon--2T9_0 rating__icon100--2vw_3"></i><i style="height: 16px; width: 16px;" class="rating__icon--2T9_0 rating__icon100--2vw_3"></i><i style="height: 16px; width: 16px;" class="rating__icon--2T9_0 rating__icon100--2vw_3"></i><i style="height: 16px; width: 16px;" class="rating__icon--2T9_0 rating__icon60--L-GzD"></i><i style="height: 16px; width: 16px;" class="rating__icon--2T9_0 rating__icon0--1xK2J"></i>'

我搜索了尽可能多的似乎属于此类错误的帖子,并找到了三个主要建议,说明如何使用 HTML 版本的评级删除任何剩余记录。

df[~df.rating.str.contains("icon", na=False)]

df = df.replace(r'^\s*$', np.nan, regex=True)

pd.to_numeric(df.rating, errors='coerce').dropna()

我已经尝试了所有三个,但在尝试将评级值转换为浮点数时仍然得到相同的错误。预先感谢您提供有关如何克服此减速带的任何其他建议。我对 python 非常陌生(并且一般都在编写代码)——我参加了一个在线课程并自学了,这样我就可以自己完成这个项目。非常欢迎任何和所有帮助/建议,我非常感谢您的时间和想法。

编辑:

回答 @0x5453 下面的问题,进行初始 HTML -> 数字评级转换的代码:

import pandas as pd
import numpy as np

df = pd.read_csv('/Users/spencermains/documents/cruu/WR_finals/trainclean_wine_reviews_red_apr2021.csv',
                     dtype={'id':str, 'winery_name':str, 'wine_name': str, 'rating':object})

dframe = df.replace('<i style="height: 16px; width: 16px;" class="rating__icon--2T9_0 rating__icon100--2vw_3"></i><i style="height: 16px; width: 16px;" class="rating__icon--2T9_0 rating__icon100--2vw_3"></i><i style="height: 16px; width: 16px;" class="rating__icon--2T9_0 rating__icon100--2vw_3"></i><i style="height: 16px; width: 16px;" class="rating__icon--2T9_0 rating__icon60--L-GzD"></i><i style="height: 16px; width: 16px;" class="rating__icon--2T9_0 rating__icon0--1xK2J"></i>', '3.5')

(长度缩短,但你明白了)

标签: pythonpandas

解决方案


推荐阅读