将数据框列值转换为十进制值
Converting data frame column values to decimal values
我的数据集有两列,'A' 和 'B,',它们都有百分比值,但都是对象数据类型。例如,
A%
B%
1.x%
3.x%
2.x%
4.x%
目标:我最感兴趣的是将其用于机器学习聚类,因此我的目标是将其转换为十进制形式。例如,将“1.2%”对象值转换为浮点值 0.012。
我试了两种方法,第一种成功了,但是时间比较长
我使用 pandas.Series.str.strip 将对象 % 从 say '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' object has no attribute 'strip'
我尝试为这个函数提供一个 int、float、numpy 数组,甚至是一个数据帧,但我得到了同样的错误:'that' object has no attribute'strip'。我不确定我哪里出错了。有没有更好的方法来处理这样的需求?非常感谢任何帮助!
df['A'] = df.apply(lambda row : Tab_to_float(row['A']), axis = 1)
您可以对这两列执行此操作,然后您可以应用此功能。
我们正在沿 DataFrame 的轴应用一个函数。 (这里我们正在更改列的每个元素)。我们没有更改此解决方案中 Tab_to_float
函数的任何内容。
data = {
'A':['34.3%', '24%'],
'B':['32%','33%'] }
df = pd.DataFrame(data)
df['A'] = df.apply(lambda row : Tab_to_float(row['A']), axis = 1)
df['B'] = df.apply(lambda row : Tab_to_float(row['B']), axis = 1)
print(df)
输出:
A B
0 0.343 0.32
1 0.240 0.33
为了让它更有趣,这里有一个片段,用于将所有以“%”结尾的列从文本百分比格式转换为浮点数:
for col in df.filter(regex='.*%'): # if column name ends in '%'
df[col] = df[col].str.rstrip('%').astype(float).div(100) # remove %, convert to float, divide by 100
df.rename(columns={col: col.rstrip('%')}, inplace=True) # remove the '%' in the column name
输出:
A B
0 0.011 0.033
1 0.022 0.044
您可以使用 lambda 运算符将函数应用于 pandas 数据框或系列。您可以将列中的每个元素转换为浮点数并除以 100,如下所示:
(df['A']).apply(lambda x: float(x.strip('%'))/100)
我的数据集有两列,'A' 和 'B,',它们都有百分比值,但都是对象数据类型。例如,
A% | B% |
---|---|
1.x% | 3.x% |
2.x% | 4.x% |
目标:我最感兴趣的是将其用于机器学习聚类,因此我的目标是将其转换为十进制形式。例如,将“1.2%”对象值转换为浮点值 0.012。
我试了两种方法,第一种成功了,但是时间比较长
我使用 pandas.Series.str.strip 将对象 % 从 say '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' object has no attribute 'strip'
我尝试为这个函数提供一个 int、float、numpy 数组,甚至是一个数据帧,但我得到了同样的错误:'that' object has no attribute'strip'。我不确定我哪里出错了。有没有更好的方法来处理这样的需求?非常感谢任何帮助!
df['A'] = df.apply(lambda row : Tab_to_float(row['A']), axis = 1)
您可以对这两列执行此操作,然后您可以应用此功能。
我们正在沿 DataFrame 的轴应用一个函数。 (这里我们正在更改列的每个元素)。我们没有更改此解决方案中 Tab_to_float
函数的任何内容。
data = {
'A':['34.3%', '24%'],
'B':['32%','33%'] }
df = pd.DataFrame(data)
df['A'] = df.apply(lambda row : Tab_to_float(row['A']), axis = 1)
df['B'] = df.apply(lambda row : Tab_to_float(row['B']), axis = 1)
print(df)
输出:
A B
0 0.343 0.32
1 0.240 0.33
为了让它更有趣,这里有一个片段,用于将所有以“%”结尾的列从文本百分比格式转换为浮点数:
for col in df.filter(regex='.*%'): # if column name ends in '%'
df[col] = df[col].str.rstrip('%').astype(float).div(100) # remove %, convert to float, divide by 100
df.rename(columns={col: col.rstrip('%')}, inplace=True) # remove the '%' in the column name
输出:
A B
0 0.011 0.033
1 0.022 0.044
您可以使用 lambda 运算符将函数应用于 pandas 数据框或系列。您可以将列中的每个元素转换为浮点数并除以 100,如下所示:
(df['A']).apply(lambda x: float(x.strip('%'))/100)