首页 > 解决方案 > 将除一列之外的所有对象列转换为浮点数

问题描述

假设在数据框 df 中有:

 a     b    c    d
ana   31%  26%  29%
bob   52%  45%  9%
cal   11%  6%   23%
dan   29%  12%  8%

其中 a、bc 和 d 下的所有数据类型都是对象。我想将 b、c 和 d 转换为它们的十进制形式:

df.columns = df.columns.str.rstrip('%').astype('float') / 100.0 

但我不知道如何不包括列

标签: pythonpandasdataframe

解决方案


用于Index.drop所有没有awith的列DataFrame.replace,转换为浮点数并除以100

cols = df.columns.drop('a') 
df[cols] = df[cols].replace('%', '', regex=True).astype('float') / 100.0 
print (df)
     a     b     c     d
0  ana  0.31  0.26  0.29
1  bob  0.52  0.45  0.09
2  cal  0.11  0.06  0.23
3  dan  0.29  0.12  0.08

或者您可以将第一列转换为indexby DataFrame.set_index,因此所有没有的列a都应该被处理:

df = df.set_index('a').replace('%', '', regex=True).astype('float') / 100.0 
print (df)
        b     c     d
a                    
ana  0.31  0.26  0.29
bob  0.52  0.45  0.09
cal  0.11  0.06  0.23
dan  0.29  0.12  0.08

推荐阅读