浮动到百分比样式错误的熊猫数据框列

时间:2019-01-09 12:33:42

标签: python pandas dataframe

我正在尝试将浮点数的pandas数据框列转换为百分比样式

C
0.9977
0.1234
1.000
..

C
99.77%
12.34%
100%
...

为此,我正在做

df['C'] = df['C'].map(lambda n: '{:.2%}'.format(n))

但是出现以下错误:

ValueError: Unknown format code '%' for object of type 'str'

我也尝试了'{:,.2%}',但发生了同样的错误...

我做错了什么?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

您也可以使用df.style

df.style.format({'C': '{:.2%}'})

如果您的系列数据类型不是问题,并且想将其用作字符串,请尝试:

df['C'] = df.C.apply(lambda x: f"{x[:x.find('.')+3]}%")
df
    C
0   0.99%
1   0.12%
2   1.00%

或者如果使用python <3.6:

df['C'] = df.C.apply(lambda x: x[:x.find('.')+3]+'%')

使用Jezrael的想法转换为数字列,并将无效字符串设为0:

df['C'] = pd.to_numeric(df['C'], errors='coerce').fillna(0)
df.style.format({'C': '{:.2%}'})

答案 1 :(得分:0)

首先通过astype将列转换为浮点数:

df['C'] = df['C'].astype(float).map("{:.2%}".format)

还应简化解决方案:

0

编辑:

问题是列中的一些非数字值。


将非数字替换为print (df) C 0 0.9977 1 0.1234 2 Covered fraction df['C'] = pd.to_numeric(df['C'], errors='coerce').fillna(0).map("{:.2%}".format) print (df) C 0 99.77% 1 12.34% 2 0.00%

df['C'] = pd.to_numeric(df['C'], errors='coerce')
df = df.dropna(subset=['C'])
df['C'] = df['C'].astype(float).map("{:.2%}".format)
print (df)
        C
0  99.77%
1  12.34%

或删除具有以下值的行:

IIF (name.value ='no',  name1.value, name2.Value) as [name 1],


IIF (name.value ='yes', name3.value, name4.value) as [name 1.5],