You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:12:44