无法使用.astype(int)方法将dataframe列转换为int变量类型

2024-06-07 00:52:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在遍历数据帧的行以提取值,如下所示,但我收到的总是一个浮点值,并且我无法将result["YEAR_TORONTO"]result["YEAR_TORONTO2"]转换为int

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]

你知道为什么会这样吗?尝试了多种方法,包括pd.to_numericround(),但尽管采用了这种方法,但没有成功

有趣的是,当我输出 result["YEAR_TORONTO"].iloc[1].astype(int) if not np.isnan(result["YEAR_TORONTO"].iloc[i]) else np.nan, 我将2016作为int获取,但一旦通过调用result输出整个数据帧,我仍然将2016.0作为float获取

样本数据(输入):

    SOURCE_DATASET  START_DATE
0   brampton        06-04-16
1   toronto         06-04-16
2   brampton        06-04-16
3   toronto         06-04-99

样本数据(输出):

    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  

也尝试了np.where,得到了相同的结果


Tags: 数据sourceifnpresultnanyearstart
1条回答
网友
1楼 · 发布于 2024-06-07 00:52:13

您使用astype()的方法是正确的,但如果您的列包含nan,它确实有效。你可以试着先分开

result["YEAR_TORONTO"].astype(str).str.split('.', expand=True)[0].tolist()

然后分开,然后从那里拿走

或者

Result.loc[RESULT['TORONTO'].notnull(), 'x'] = result.loc[result['TORONTO'].notnull(), 'x'].apply(int)

相关问题 更多 >