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

遍历Pandas DataFrame将带单位字符串转为整数的方法求助

Pandas带单位字符串转整数的问题解决

原代码的问题

原代码的核心错误在于:

  • 使用'm' in db[c]检查列中是否包含指定单位,实际是判断字符串'm'是否为该列的索引标签,而非值中包含'm',导致条件判断完全失效,所有数据都进入else分支未被处理。
  • 整列仅能处理一种单位,但实际列中可能同时存在多种单位(比如Posts列既有3.4k又有纯数字915),原逻辑无法覆盖这种场景。

修正方案

编写通用转换函数,对每个单元格内容单独判断单位并转换,同时处理空值、纯数字等边界情况:

步骤1:定义转换函数

import pandas as pd

def convert_to_int(value):
    # 处理空值
    if pd.isna(value):
        return value
    # 统一转为字符串并去除首尾空格
    value_str = str(value).strip()
    if not value_str:
        return None
    
    # 根据后缀单位转换数值
    if value_str.endswith('m'):
        return int(float(value_str[:-1]) * 1_000_000)
    elif value_str.endswith('k'):
        return int(float(value_str[:-1]) * 1_000)
    elif value_str.endswith('b'):
        return int(float(value_str[:-1]) * 1_000_000_000)
    else:
        # 处理纯数字情况,兼容浮点型字符串
        try:
            return int(float(value_str))
        except ValueError:
            # 无法转换的内容保持原样
            return value

步骤2:批量处理指定列

int_cols = ['Avg. Likes', 'Posts', 'New Post Avg. Likes','Total Likes' ]

for col in int_cols:
    db[col] = db[col].apply(convert_to_int)
    # 使用Nullable整数类型兼容空值(无需兼容空值可直接用'int')
    db[col] = db[col].astype('Int64')

效果验证

针对提供的样本数据,转换后各列结果如下:

  • Avg. Likes:8700000、8200000、6700000
  • Posts:3400、7000、915
  • New Post Avg. Likes:6300000、5000000、3500000
  • Total Likes:29100000000、57400000000、6100000000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:50:30