如何在Python中将带小数的int64列转换为无小数整数?
解决pandas年份列转整数的问题
错误原因
你碰到的ValueError: invalid literal for int() with base 10: '',是因为自定义函数里的str(x).rstrip(".0")处理0.0时,会把"0.0"里的0和.全删光,得到空字符串,转int自然报错。另外你说列是int64类型却存着2014.0,这是类型显示问题——int64根本存不了带小数的数,实际列类型应该是float64或者object。
靠谱解决方案
别写自定义函数了,pandas自带的方法更简单高效:
方法1:处理空值后转整数
- 如果空值要换成0:
df1['Année'] = df1['Année'].fillna(0).astype(int)
- 如果要保留空值(用支持空值的整数类型):
df1['Année'] = df1['Année'].astype('Int64') # 注意是大写的I
方法2:修复你的自定义函数(不推荐)
非要用自定义函数的话,别玩字符串操作,直接转float取整:
def remove_decimal(x): if pd.isnull(x): return 0 else: return int(float(x)) df1['Année'] = df1['Année'].apply(remove_decimal)
为啥astype(int, errors='ignore')没用?
errors='ignore'是遇到转不了的行就跳过,不做修改。你的列里肯定有转不了的异常值(比如空值),所以大部分行都没变化,看起来就像没效果。得先处理空值和异常值再转。
内容的提问来源于stack exchange,提问作者kim seol
相关产品推荐
相关产品推荐

