在熊猫df中向正数添加“ +”号

时间:2018-11-27 10:27:58

标签: python pandas dataframe

我想在df中的所有正值上添加“ +”。

这是我的df

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[-1,3,0,5],
                   'B':[4,5,6,5],
                   'C':[8,-9,np.nan,7]})

print (df)
   A  B    C
0 -1  4  8.0
1  3  5 -9.0
2  0  6  NaN
3  5  5  7.0

这就是我想要的样子:

print (df)
   A  B    C
0 -1  +4  +8.0
1  +3  +5 -9.0
2  +0  +6  NaN
3  +5  +5  +7.0

我的尝试

df[df > 0] = "+"

那只是用“ +”代替了正值

2 个答案:

答案 0 :(得分:4)

使用显示选项,而不是将浮点数转换为字符串(这不是您想要的):

示例:

import pandas as pd
pd.options.display.float_format = '{:+,.2f}'.format
pd.DataFrame({'a': [1.2, -3.4]})

返回:

    a
0   +1.20
1   -3.40

编辑

更好的解决方案imo:您可以使用this更改数据框的一列或多列的格式

示例:

import pandas as pd
df = pd.DataFrame({'a': [1, -3], 'b': ['Hello', 'World'], 'c': [1.234, -1.3]})
df.style.format({'a':'{:+d}', 'c': '{:+g}'})

返回:

    a   b       c
0   +1  Hello   +1.234
1   -3  World   -1.3

对于您特定的数据框,您可以执行以下操作:

df.style.format('{:+g}')

返回

     A  B   C
0   -1  +4  +8
1   +3  +5  -9
2   +0  +6  +nan
3   +5  +5  +7

如果要删除+nan,可以执行以下操作:

df.style.format(lambda x:  'NaN' if np.isnan(x) else '{:+g}'.format(x))

返回

     A   B   C
0   -1  +4  +8
1   +3  +5  -9
2   +0  +6  NaN
3   +5  +5  +7

答案 1 :(得分:2)

df = df.applymap(lambda x: "+"+str(x) if x>0 else x)
print(df)

输出:

    A   B     C
0  -1  +4  +8.0
1  +3  +5    -9
2   0  +6   NaN
3  +5  +5  +7.0