使用.astype(int)方法无法将pandas数据框的列转换为整数变量类型。
使用.astype(int)方法无法将pandas数据框的列转换为整数变量类型。
我正在遍历数据框的行来提取值,使用的代码如下,但我收到的始终是浮点数值,我无法将其转换为result[\"YEAR_TORONTO\"]
和result[\"YEAR_TORONTO2\"]
的整数值\n
for i in range(0, len(result)): if result["SOURCE_DATASET"].iloc[i] == "toronto": result["YEAR_TORONTO"].iloc[i] = pd.to_datetime(result["START_DATE"].iloc[i]).year result["YEAR_TORONTO"].iloc[i].astype(int) if not np.isnan(result["YEAR_TORONTO"].iloc[i]) else np.nan result["YEAR_TORONTO2"].iloc[i] = result["YEAR_TORONTO"].iloc[i]
\n可能的原因是什么?尝试了多种方法,包括pd.to_numeric
和round()
,但方法没有成功\n有趣的是,当我输出result[\"YEAR_TORONTO\"].iloc[1].astype(int) if not np.isnan(result[\"YEAR_TORONTO\"].iloc[i]) else np.nan
时,我得到的是整数2016
,但是一旦我通过调用result
输出整个数据框时,我仍然得到浮点数2016.0
\n样本数据(输入):\n
SOURCE_DATASET START_DATE 0 brampton 06-04-16 1 toronto 06-04-16 2 brampton 06-04-16 3 toronto 06-04-99
\n样本数据(输出):\n
SOURCE_DATASET START_DATE YEAR_TORONTO YEAR_TORONTO2 0 brampton 06-04-16 NaN NaN 1 toronto 06-04-16 2016.0 2016.0 2 brampton 06-04-16 NaN NaN 3 toronto 06-04-99 1999.0 1999.0
\n尝试使用np.where
,结果相同。
问题出现的原因是由于数据中包含了NaN值,使用astype(int)方法无法将pandas dataframe列转换为int变量类型。解决方法有两种:
方法一:
将包含NaN值的列转换为字符串,并使用str.split('.')将其拆分,然后取第一个值作为整数类型。
代码如下:
result["YEAR_TORONTO"].astype(str).str.split('.', expand=True)[0].tolist()
方法二:
使用.loc方法将包含NaN值的列转换为整数类型。
代码如下:
Result.loc[RESULT['TORONTO'].notnull(), 'x'] = result.loc[result['TORONTO'].notnull(), 'x'].apply(int)
作者尝试了包含第一行代码,但仍然得到了与之前相同的浮点数输出结果。作者对第二行代码的工作原理不太清楚,因为对于'x'列,作者一直收到错误提示。