使用.astype(int)方法无法将pandas数据框的列转换为整数变量类型。

10 浏览
0 Comments

使用.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_numericround(),但方法没有成功\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,结果相同。

0
0 Comments

问题出现的原因是由于数据中包含了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'列,作者一直收到错误提示。

0