如何修复Pandas中int()以10为基数的无效字面量错误:"0.75"
问题修复方案
你遇到的问题核心是:df2里的列是带小数的字符串(比如"0.75"),但df1对应列是int类型,直接用astype强制转换时,字符串没法直接转成整数,所以报错。之前把两个DF转成字符串再转的操作没用,因为df1转成字符串后所有列类型都变成了object,转完df2还是object,根本没匹配到df1原本的数值类型。
给你两个通用的修复方案:
方案一:逐列精准处理(推荐,可控性高)
遍历每一列,先把df2的列转成标准数值类型,再匹配df1的目标类型,还能灵活处理异常值:
import pandas as pd # 循环处理每一列 for col, target_dtype in df1.dtypes.items(): # 处理数值类型列(int/float) if pd.api.types.is_numeric_dtype(target_dtype): # 第一步:把df2的列转成数值(errors='raise'会报错提醒无效值,换成'coerce'会把无效值转成NaN) df2[col] = pd.to_numeric(df2[col], errors='raise') # 如果目标是整数类型,可选择直接截断或四舍五入 if pd.api.types.is_integer_dtype(target_dtype): # 直接截断小数部分(比如0.75→0) df2[col] = df2[col].astype(target_dtype) # 或者四舍五入后转int(0.75→1): # df2[col] = df2[col].round().astype(target_dtype) # 非数值类型(比如字符串、日期)直接转换 else: df2[col] = df2[col].astype(target_dtype)
方案二:自动推断转换(适合简单场景)
用pandas的convert_dtypes先让df2自动适配合理的数值类型,再匹配df1的类型:
# 先让df2自动转换为最合适的数值类型 df2 = df2.convert_dtypes() # 再匹配df1的类型 df2 = df2.astype(df1.dtypes.to_dict(), errors='ignore')
这个方案更简洁,但对异常值的处理不如方案一灵活,errors='ignore'会跳过转换失败的列。
内容的提问来源于stack exchange,提问作者Kelly
相关产品推荐
相关产品推荐

