【发布时间】:2018-11-19 00:49:30
【问题描述】:
我有一个包含许多(但不是全部)Decimal128 列的数据框(取自 mongodb 集合)。我无法对它们进行任何数学运算或比较(例如,在 'Decimal128' 和 'float' 的实例之间不支持 '
将所有这些转换为浮点数或我可以使用的一些更简单的内置类型的最快/最简单的方法是什么?
有 Decimal128 to_decimal() 方法和 pandas astype(),但我怎样才能在一步/辅助方法中为所有(decimal128)列做到这一点?
编辑,我试过了:
testdf = my_df.apply(lambda x: x.astype(str).astype(float) if isinstance(x, Decimal128) else x)
testdf[testdf["MyCol"] > 80].head()
但我明白了:
TypeError: '>' not supported between instances of 'Decimal128' and 'int'
使用 .astype(str).astype(float) 转换单个列有效。
【问题讨论】:
-
我认为 isinstance 方法返回 false,因此列没有被转换为浮点数。我想如果你使用 Decimal128 的确切类,这个方法就可以了。
-
它们都是 'object' 的实例,而不是 str 或 Decimal128。
-
您能展示一下您的数据框的外观吗?
-
看起来大多数都是正确的,除了字符串作为 dtype 对象进来
-
认为我必须逐列而不是自动化它。感谢您的帮助