当前位置: 首页 > 知识库问答 >
问题:

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

牛凌
2023-03-14

我正在遍历数据帧的行以提取如下值,但我收到的总是一个浮点值,并且我无法将结果[“YEAR\u TORONTO”]结果[“YEAR\u TORONTO2”]

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.\u numericround(),但尽管采用了这种方法,还是没有成功

有趣的是,当我输出结果["YEAR_TORONTO"]. iloc[1]. astype(int)如果不是np.isnan(结果["YEAR_TORONTO"]. iloc[i])np.nan,我得到2016作为int,但是一旦我输出整个数据帧通过调用结果,我仍然得到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,得到了相同的结果。

共有1个答案

赵镜
2023-03-14

您使用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)
 类似资料:
  • 问题内容: 我想对成绩簿方法使用2D数组,其中包含学生姓名,然后是考试成绩。在课堂上,我有以下内容。 但是我得到一个错误int []无法转换为int。 问题答案: 你有: 但是是一个。数组维数必须为,因此不能用作数组维数(鉴于字面量是多少,我可以理解您对错误的困惑:它想要一个,但您给了它一个)。 从您的描述来看,我猜您的意思是: 哪里是你需要的,包含考试的次数。不过,只是一个猜测。

  • 问题内容: 这里是编程的新手,并且我一直收到错误消息,“不兼容的类型,不能将int转换为int []”,问题是如果R1和R2的长度相等,则将它们加在一起,如果没有打印出一条信息,说明“数组的长度必须相同”,如果这很重要,则不知道我在哪里出错,将不胜感激任何帮助 问题答案: 您需要分配给数组元素,但是这样做做错了。

  • 问题内容: 我想将SQL COUNT的结果存储在变量中,然后将它们除,但是出现错误: 注意:类mysqli_result的对象无法在----中转换为int 我曾经在测试时显示结果…我该如何解决? 问题答案: 您需要先获取结果并将其存储在变量中,然后再进行数学运算。

  • 我在pandas中有一个数据帧,它混合了int和str数据列。我想先连接dataframe中的列。为此,我必须将列转换为。我试着做了如下工作: 或 但在这两种情况下,它都不起作用,我得到一个错误,说“不能连接'str'和'int'对象”。将两个列串联在一起可以很好地工作。

  • 我是斯威夫特的新人,现在尽我所能地学习这个。我写了得到参数的函数:数字和函数,它们与这个数字一起工作: 但是编译给出错误。当我试图改变论点时,比如

  • 假设我有一个字符串流: 工作正常: 比较器是一种功能接口。这意味着我们可以使用方法引用或lambdas来实现它。Comparator接口实现一个方法,该方法接受两个字符串参数并返回一个int。但是,Comparator::ReverseOrder不这样做。它是对接受零参数并返回比较器的函数的引用。这与接口不兼容。这意味着我们必须使用方法,而不是方法引用。 但我不明白。