Python 使用函数时将浮点转换为int不起作用

Python 使用函数时将浮点转换为int不起作用,python,string,type-conversion,Python,String,Type Conversion,我需要在数据帧中加入一列。该列包含混合数据类型,例如: s = pd.Series([3985500,'3985500',3985500.0,'3985500.0','3985500A','3985500B']) 我试图将所有数字转换为int,以确保在加入时找到键。不管是字符串还是字符串,只要将浮点值转换为int,就可以保留字符串,并且允许最后的列格式为字符串 我尝试了astype(),但它忽略了浮点数,出于某种原因,我一直在使用科学符号(参见索引2和索引3): 我得到pd.to_numeri

我需要在数据帧中加入一列。该列包含混合数据类型,例如:

s = pd.Series([3985500,'3985500',3985500.0,'3985500.0','3985500A','3985500B'])
我试图将所有数字转换为int,以确保在加入时找到键。不管是字符串还是字符串,只要将浮点值转换为int,就可以保留字符串,并且允许最后的列格式为字符串

我尝试了
astype()
,但它忽略了浮点数,出于某种原因,我一直在使用科学符号(参见索引2和索引3):

我得到
pd.to_numeric
使用
try except处理浮点:

try: int(pd.to_numeric(s[3]))
except ValueError: s[3]

3985500
dtype: int
但是,只要我在函数中尝试它,它就不会返回任何结果:

def convert_to_int(cell):
  try: int(pd.to_numeric(cell))
  except ValueError: cell

convert_to_int(s[3])
知道为什么会这样吗?可能还有其他的解决方法,但为什么它在函数中不起作用呢

我希望将此函数用于
s.apply()
。我看过两篇类似的帖子:


    • 您没有从函数返回任何值,即

      def convert_to_int(cell):
        try: 
            return int(pd.to_numeric(cell))
        except ValueError: 
            cell
      
      convert_to_int(s[3])
      
      要使用apply()语法,请执行以下操作:


      您需要将所有数字类型值转换为
      int
      。您不需要有单独的函数,您可以简单地使用,如下所示:

      In [202]: s = pd.Series([3985500,'3985500',3985500.0,'3985500.0','3985500A','3985500B'])
      In [203]: s = s.apply(lambda x:x if isinstance(x, str) else int(x)) 
      
      In [204]: s
      Out[204]: 
      0      3985500
      1      3985500
      2      3985500
      3    3985500.0
      4     3985500A
      5     3985500B
      dtype: object
      

      上述命令将所有数字类型转换为
      int
      ,保持
      string
      不变。

      返回int(pd.to_numeric(cell))
      。此外,您还可以将
      downcast
      参数作为“整数”传递给
      传递给\u numeric
      ,避免使用
      int
      进行强制转换。您是否在笔记本中运行此操作?否则,您的徒劳尝试也不会产生输出。谢谢@lightalchest,返回的正是您所缺少的。见公认的答案。但是,由于某些原因,使用向下播放选项仍然会将索引2处的值作为浮点值返回。@Mistermiagi,是的,我正在笔记本中运行此选项,这就是为什么它会在裸
      try except
      中显示结果的原因。谢谢!这是一个新手犯的错误。我假设返回是隐含的,因为当它没有函数时,它在Google Colab中显示一个没有返回的值。但这是有道理的,因为它还不是一个函数。我认为这是正确的答案,因为它回答了为什么它不能作为函数工作的问题。@MayankPorwal给出的答案似乎更有效。顺便说一句,如果我没有弄错的话,
      除外
      也需要一个返回值?谢谢,但是这个方法仍然以浮点形式返回索引3处的数字。但它似乎更有效。它在索引3处返回一个浮点,因为它在初始化
      s
      时被定义为一个字符串。我明白你的意思。这就是为什么我使用了
      try except
      ,首先尝试并转换为int。您如何为索引3处的字符串做准备?
      s.apply(lambda x:convert_to_int(x))
      
      In [202]: s = pd.Series([3985500,'3985500',3985500.0,'3985500.0','3985500A','3985500B'])
      In [203]: s = s.apply(lambda x:x if isinstance(x, str) else int(x)) 
      
      In [204]: s
      Out[204]: 
      0      3985500
      1      3985500
      2      3985500
      3    3985500.0
      4     3985500A
      5     3985500B
      dtype: object