【发布时间】:2021-11-10 06:07:48
【问题描述】:
我的数据集有两列,“A”和“B”,它们都有百分比值,但属于对象数据类型。例如,
| A% | B% |
|---|---|
| 1.x% | 3.x% |
| 2.x% | 4.x% |
目标:我最感兴趣的是将它用于机器学习集群,因此我的目标是将其转换为十进制形式。例如,将 '1.2%' 对象值转换为浮点值 0.012。
我尝试了两种方法:第一种是成功的,但是花了很长时间。
-
我使用 pandas.Series.str.strip 将对象 % 从 '34%' 中删除或剥离为 '34' obj,然后使用 .to_numeric() --> 34 将此值转换为浮点数。现在我将其除以值为 100,结果为 0.34。
-
但是,在第二种方式中,我尝试了以下方法,
功能:
def Tab_to_float(z):
return float(z.strip('%'))/100
现在当我通过如下列(这是一个对象)时:
Tab_to_float(df['A'])
我得到错误:
AttributeError: 'Series' 对象没有属性 'strip'
我尝试为这个函数提供一个 int、float、numpy 数组,甚至是一个数据框,但我得到了同样的错误:'that' object has no attribute'strip'。我不确定我哪里出错了。有没有更好的方法来处理这些要求?非常感谢任何帮助!
【问题讨论】:
-
您需要使用
.str访问器,因为您要传递整个系列。即z.str.strip('%')。但另一个问题是,如果实际值包含x,那么它不能转换为float。 -
谢谢@ThePyGuy,我放了 z.str.strip 但它仍然给我错误:无法将系列转换为
。此外,我只是将 x 值作为示例(抱歉造成混淆!) - 它就像数值 25.2%、65.35% 等。x 与那里的任何值一样。 -
return float(z.strip('%'))/100->return z.str.rstrip('%').astype(float)/100? -
谢谢@Ch3steR!这行得通!真的很感谢你的帮助。你能解释一下 astype( ) 在这里有什么帮助吗?
-
.astype将您的数据转换为所需的dtype。
标签: python pandas dataframe function data-science