Pandas:将多类型数据列转为整数并忽略转换错误
解决DataFrame列中混合类型数据转整数字符串的问题
问题分析
df['code'].astype(int, errors='ignore') 无法生效的核心原因:
- 对于字符串类型的指数格式(如
'1.17E+04'),astype(int)无法直接解析,因为它本质是字符串而非数值类型; errors='ignore'仅在转换失败时返回原数据,但无法主动处理「字符串转数值再转整数」的完整流程。
解决方案
使用自定义函数结合apply方法,逐个处理列中的每一个元素:
- 对浮点数、可转数值的指数格式字符串,先转成数值再转整数,最终转为字符串;
- 对无法转数值的字符串(如
'24477G'),直接保留原内容。
代码实现
- 构造示例DataFrame(模拟你的数据场景):
import pandas as pd df = pd.DataFrame({ 'code': [1170E1, '1.17E+04', 11700.0, '24477G', 124601, '247602'] })
- 定义转换函数:
def convert_to_int_str(x): try: # 先转为float,兼容浮点数、指数格式字符串 num = float(x) # 转整数后转为字符串 return str(int(num)) except (ValueError, TypeError): # 转换失败(如含非数字字符),返回原字符串 return str(x)
- 应用函数到目标列:
df['code'] = df['code'].apply(convert_to_int_str)
执行结果
处理后df['code']的输出与你期望一致:
0 11700 1 11700 2 11700 3 24477G 4 124601 5 247602 Name: code, dtype: object
补充说明
- 如果数据中存在带小数的数值(如
123.45),int(float(x))会自动截断小数部分,若需四舍五入可替换为str(round(num)); - 函数通过
try-except捕获转换异常,确保所有无法转换的内容都能原样保留。
内容的提问来源于stack exchange,提问作者mike01010
相关产品推荐
相关产品推荐

