遍历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
相关产品推荐
相关产品推荐

