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

如何使用for循环批量替换DataFrame中带单位的列数据?

批量转换TikTok统计数据中的带单位数值

问题背景

手里有一份TikTok统计数据的DataFrame,包含以下列:

  • Views avg.
  • Likes avg
  • Comments avg.
  • Shares avg

部分列的数值带有M(百万)、K(千)单位,数据示例如下:

Views avg.Likes avgComments avg.Shares avg
318.7M2.6M54.7K
617.7M2.3M18K

之前尝试了两种转换方法,但在遍历DataFrame列时遇到瓶颈(对应代码for views in df_tiktok: #THIS IS WHERE I GET STUCK),需要实现用正则表达式结合循环的方式,把指定列的带单位数值批量转为纯数值。


此前尝试的代码

首次尝试

likes_avg = [[likes] for likes in tiktok_data]
if 'K' in likes :
        like=likes.strip('K')
        like=float(like)*1000
        likes_avg.append(round(like))
if 'M' in likes :
        like=likes.strip('M')
        like=float(like)*1000000
        likes_avg.append(round(like))

第二次尝试

input = '18.7m, 17.7m, 11.1m, 9.3m, 6.9m, 9.9m, 4.4m, 1.8m, 7.9m'

multipliers = {'k': 1e3,
               'm': 1e6,
              }

pattern = r'([0-9.]+)([km])'
for number, suffix in re.findall(pattern, input):
    number = float(number)
    print(number * multipliers[suffix])

解决方法

步骤1:编写通用转换函数

先写一个能处理单个带单位字符串的函数,用正则匹配数值和单位:

import re
import pandas as pd

def convert_unit(value):
    # 处理空值或纯数字的情况
    if pd.isna(value) or str(value).isdigit():
        return float(value)
    
    multipliers = {'k': 1e3, 'm': 1e6}
    # 匹配不区分大小写的单位
    pattern = r'([0-9.]+)([KMkm])'
    match = re.match(pattern, str(value))
    
    if match:
        num = float(match.group(1))
        suffix = match.group(2).lower()
        return num * multipliers[suffix]
    # 匹配失败时返回原数值(可按需调整逻辑)
    return value

步骤2:遍历指定列批量转换

明确需要处理的列,用for循环遍历这些列,对每一列应用转换函数:

# 假设你的DataFrame名为df_tiktok
cols_to_convert = ['Likes avg', 'Comments avg.', 'Shares avg']  # Views avg.为纯数字,可跳过

for col in cols_to_convert:
    df_tiktok[col] = df_tiktok[col].apply(convert_unit)

说明

  • 函数兼容了纯数字、空值场景,避免转换时报错
  • 正则不区分大小写,K/k、M/m都能匹配识别
  • 直接遍历需要转换的列名列表,比遍历整个DataFrame更高效精准

内容的提问来源于stack exchange,提问作者Sindy Saintclair

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:45:23