【问题标题】:apply() function convert int datatype to decimal and way to prevent auto conversionapply() 函数将 int 数据类型转换为十进制以及防止自动转换的方法
【发布时间】:2021-07-30 11:36:37
【问题描述】:

我面临在数据帧中实现 apply() 函数但在将 int 转换为十进制时应用函数的场景

例子

df
A      B      C
12    2.3    40
Nan   29.0   23
2     NaN    3.4
3.9   3      2

当我执行 apply 时,它会将 int 值转换为十进制。

df['A']=df['A'].apply(lambda x: 0 if x!=x else x)
A       B      C
12.00  2.3     40
0.00   29.0    23
2.00   NaN     3.4
3.90   3       2

预期的数据框:

A       B      C
12  2.3     40
0   29.0    23
2   NaN     3.4
3.9   3       2

创建以下数据框的最终目标:

A         B      C
int    decimal  int
int    decimal  int
int    decimal  decimal
decimal  int    int

我试过了

df['A']=df['A'].apply(lambda x: o if x!=x else int(x))

但这会将十进制值转换为int。 任何人都可以向我建议如何防止建议转换,因为我非常关心数据框单元格的数据类型。

注意:我没有使用 fillna(),因为它也会导致一些将 int 自动转换为小数的问题。

如果有人有其他解决方案来防止这种情况也很有帮助。

【问题讨论】:

  • int 到 decimal 的自动转换问题是什么意思?你是在说float吗?你的专栏A 不应该是float,就像你有3.9 一样吗?
  • 整个数据框的dtype是什么?是对象吗? ..请显示df.dtypes的输出
  • @mozway,我专注于数据帧的单元格,在数据帧列上使用 apply() 函数后,此 int 转换为十进制
  • pandas 数据框的每一列都是一个pandas 系列,并且一个系列总是基于其中的值具有一种数据类型,如果值是浮动的或NaN,则整列将是浮动的数据类型。
  • 我认为您的意思是“浮动”,而不是 decimal。但无论如何,不​​使用fillna的根本原因是什么?

标签: python pandas apply


【解决方案1】:

作为astype('O')作为对象进行数据类型转换

df['A']=df['A'].apply(lambda x: 0 if x!=x else x).astype('O')

要填充整个数据框或单个列,您可以使用 fillna 方法,方法相同

df.fillna(0).astype('O')

【讨论】:

  • 此解决方案还将每个单元格值转换为浮点数/小数
  • 你使用的是哪个熊猫版本?
猜你喜欢
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 2019-06-10
  • 1970-01-01
相关资源
最近更新 更多