Pandas执行astype(int)时报ValueError: invalid literal for int() with base 10求助
解决Pandas中
astype(int)遇到'6+3'的ValueError问题 你的bedroom列包含'6+3'这类代表加法表达式的字符串,直接调用astype(int)会报错,因为Python的int()函数只能解析纯数字格式的字符串,无法处理带运算符的表达式。以下是几种可行的解决方法:
方法一:用
eval()计算表达式(简单直接)
针对包含+的字符串,用eval()执行加法运算,其他情况直接转整数:df['bedroom'] = df['bedroom'].apply(lambda x: eval(x) if '+' in x else int(x))注意:如果列中存在其他非数字/非加法格式的内容,可能会触发新的异常,需要额外处理。
方法二:拆分字符串后求和(更安全)
若确定所有带符号的内容都是X+Y格式,可拆分字符串后转整数再求和,避免eval()执行未知代码的风险:df['bedroom'] = df['bedroom'].str.split('+').apply(lambda parts: sum(int(p) for p in parts))方法三:兼容异常情况的通用处理
如果列中存在多种无法直接转换的格式,可自定义函数并捕获异常,确保转换过程不中断:import pandas as pd def convert_bedroom(s): try: if '+' in s: return sum(int(p) for p in s.split('+')) else: return int(s) except (ValueError, TypeError): # 无法转换时返回pd.NA,也可替换为你需要的默认值(如0) return pd.NA df['bedroom'] = df['bedroom'].apply(convert_bedroom)
内容的提问来源于stack exchange,提问作者Nurdin
相关产品推荐
相关产品推荐

