【发布时间】:2021-03-09 21:55:40
【问题描述】:
我正在遍历数据帧的行以提取如下值,但我收到的始终是浮点值,我无法将 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_numeric 和round(),但尽管有这种方法,但还是没有运气
有趣的是,当我输出
result["YEAR_TORONTO"].iloc[1].astype(int) if not np.isnan(result["YEAR_TORONTO"].iloc[i]) else np.nan,
我得到2016 作为一个int,但是一旦我通过调用result 输出整个数据帧,我仍然得到2016.0 作为一个浮点数
样本数据(输入):
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,得到了相同的结果。
【问题讨论】:
-
你能展示一些示例数据吗?而且,希望这不是一个大数据集,因为您是按元素而不是按系列应用这些操作。
-
刚刚添加了一些示例数据。我明智地做这个元素有问题吗?我将获得的记录最多应该只有 4 行,但如果有更多数据会有什么问题?
-
存在 NaN,所以默认所有值都是浮点数,对于带有
NaNs 的整数需要result["YEAR_TORONTO"] = result["YEAR_TORONTO"].astype('Int64')
标签: python pandas types type-conversion integer