如何处理Pandas Series中的列表元素并计算分数占比百分比
解决Pandas分数字符串转百分比列的问题
问题原因
你用str.split('/')得到的是每个元素为列表的Series,numbers[0]只会取到Series的第一行元素(比如[1,1]),无法批量处理所有行,所以需要用Pandas的批量处理方法来转换。
方法一:用str.get()拆分分子分母
通过str.get()提取每个列表的分子(第0位)和分母(第1位),转成整数后计算百分比:
# 提取分子并转为整数 df_data['numerator'] = df_data['prize_share'].str.split('/').str.get(0).astype(int) # 提取分母并转为整数 df_data['denominator'] = df_data['prize_share'].str.split('/').str.get(1).astype(int) # 计算百分比数值(如1/1得到100.0) df_data['share_pct'] = (df_data['numerator'] / df_data['denominator']) * 100 # 可选:转成带%的字符串格式(如100%、25%) df_data['share_pct'] = df_data['share_pct'].apply(lambda x: f"{x:.0f}%")
方法二:用apply()批量处理每个列表
直接对拆分后的Series使用apply,遍历每个列表完成计算:
# 直接计算百分比数值 df_data['share_pct'] = df_data['prize_share'].str.split('/').apply(lambda lst: (int(lst[0])/int(lst[1]))*100) # 转成带%的字符串格式 df_data['share_pct'] = df_data['share_pct'].apply(lambda x: f"{x:.0f}%")
方法三:正则提取一步到位
如果分数格式固定,用正则直接提取分子分母,跳过列表拆分步骤:
import re def convert_to_pct(score_str): num, den = re.findall(r'\d+', score_str) return f"{(int(num)/int(den))*100:.0f}%" df_data['share_pct'] = df_data['prize_share'].apply(convert_to_pct)
内容的提问来源于stack exchange,提问作者Aadvik
相关产品推荐
相关产品推荐

