求助:将DataFrame中星级评文字符串列转换为整数的方法
解决StarRating列转整数的问题
嘿,我来帮你搞定这个星级转换的问题!你的需求很明确:把DataFrame里像"5.0 out of 5 stars"这样的字符串转成整数星级,之前的尝试踩了几个小坑,我们一步步来解决:
最简洁高效的解决方案:字符串拆分提取
因为你的星级字符串格式完全统一,星级数字都在开头第一个位置,直接拆分字符串提取就行,用Pandas的矢量化操作比手动循环快太多:
import pandas as pd # 直接对StarRating列做转换 df['StarRating'] = df['StarRating'].str.split().str[0].astype(float).astype(int)
拆解一下这个操作:
str.split():把每个字符串按空格拆成列表,比如"5.0 out of 5 stars"会变成['5.0', 'out', 'of', '5', 'stars']str[0]:取列表的第一个元素,也就是我们要的"5.0"astype(float).astype(int):先转成浮点数,再转成整数,这样5.0就变成5,2.0变成2,完美符合你的需求
更灵活的备选方案:正则表达式提取
如果以后你的星级字符串格式可能有变化(比如位置调整),用正则提取数字部分会更稳妥:
df['StarRating'] = df['StarRating'].str.extract(r'(\d+\.\d+)').astype(float).astype(int)
这个正则r'(\d+\.\d+)'会精准匹配所有类似X.X的浮点数,不管它在字符串的哪个位置,都能提取出来。
为什么你之前的方法会报错?
咱们来复盘一下你踩的坑:
- 第一个方法
df[["StarRating"]].apply(pd.to_numeric):pd.to_numeric只能解析纯数字的字符串,你的字符串里有"out of stars"这些非数字内容,自然会报ValueError - 第二个循环代码:有好几处语法和逻辑错误:
for col in df.StarRating():df.StarRating是一个Series,不需要加括号调用,正确的遍历应该是for val in df['StarRating']- if语句里用
=做判断是完全错误的(=是赋值,==才是判断相等),而且整个逻辑混淆了条件和赋值,根本无法正确执行
放心用上面的两种方法,尤其是第一种,针对你现在的格式完全够用,而且比循环高效得多!
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

