将混合类型列表(字符串+整数)中的数值型转为int的实现方法
混合类型列表的数值型元素转int实现方案
需求:将包含字符串(含字符型、数值型)与整数的混合列表中,所有数值型字符串元素转换为int类型,非数值字符串和原有整数保持不变。
当前代码
data={'test':['Karan','13333333','5666666','Aryan', 44444,55555]} df=pd.DataFrame(data) for i in df["test"]: print(i, type(i))
当前输出
Karan <class 'str'> 13333333 <class 'str'> 5666666 <class 'str'> Aryan <class 'str'> 44444 <class 'int'> 55555 <class 'int'>
期望输出
Karan <class 'str'> 13333333 <class 'int'> 5666666 <class 'int'> Aryan <class 'str'> 44444 <class 'int'> 55555 <class 'int'>
实现方案
1. Python原生风格实现
通过自定义转换函数配合列表推导,兼容多种边界情况:
def convert_num_str_to_int(item): try: return int(item) except (ValueError, TypeError): return item # 处理原始列表 original_list = ['Karan','13333333','5666666','Aryan', 44444,55555] converted_list = [convert_num_str_to_int(x) for x in original_list] # 同步更新DataFrame data['test'] = converted_list df = pd.DataFrame(data) # 验证输出 for i in df["test"]: print(i, type(i))
逻辑清晰,能处理字符串含非数值内容、非字符串类型等情况。
2. Pandas简洁实现(1-2行)
方法一:apply+lambda判断
df['test'] = df['test'].apply(lambda x: int(x) if isinstance(x, str) and x.isdigit() else x)
仅针对字符串类型做纯数字判断,符合条件则转int,原有整数和非数值字符串保持原样。
方法二:pd.to_numeric批量转换
df['test'] = df['test'].apply(lambda x: pd.to_numeric(x, errors='ignore'))
pd.to_numeric自动尝试转换元素为数值类型,errors='ignore'让无法转换的元素保留原类型,数值型字符串会被转为兼容int的数值类型,打印效果符合期望输出。
内容的提问来源于stack exchange,提问作者Learner91
相关产品推荐
相关产品推荐

