如果其他条件不适用于无值的列

时间:2018-11-02 18:05:57

标签: python-3.x pandas if-statement

我为我的python脚本提供了一个输出表,根据月的不同,该表可以具有无值的单个记录或具有适当值的多个记录。 我的代码将薪水金额转换为$和格式。但是,如果“薪资”列中没有“无”,则此功能将无效。如何有条件地转换此薪水列?我提供了示例数据以及到目前为止我尝试过的内容。

样本数据

d1 = {'name': ['john', 'tom'], 'Address': ['NY', 'CA'], 'Salary' : ['5000', '6000']}
df1 = pd.DataFrame(data = d1)

我的代码

if df1['Salary'] is None:
    pass
else:
    df1['Salary'] = df1['Salary'].astype(int)
    df1['Salary'] = df1.apply(lambda x: "${:,}".format(x['Salary']), axis=1)

这是我想要的输出

    Address Salary  name
0   NY      $5,000  john
1   CA      $6,000  tom

但是,如果薪金列中没有任何内容,则此代码将无效。

d2 = {'name': ['john', 'tom'], 'Address': ['NY', 'CA'], 'Salary' : ['5000', None]}
df2 = pd.DataFrame(data = d2)

我收到以下错误:

  

TypeError:int()参数必须是字符串,类似字节的对象或数字,而不是'NoneType'

我理解错误,一列不能同时为整数,也不能为整数,更不用说格式化值了。即使我的列中没有None值,如何获取所需的输出?

1 个答案:

答案 0 :(得分:2)

仅将函数应用于非None列中的值:

d2 = {'name': ['john', 'tom'], 'Address': ['NY', 'CA'], 'Salary' : ['5000', None]}
df2 = pd.DataFrame(data = d2)
df2.loc[df2['Salary'].notnull(), 'Salary'] = (df2.loc[df2['Salary'].notnull(), 'Salary']
                                            .apply(lambda x: "${:,}".format(int(x))))

#   name Address  Salary
# 0  john      NY  $5,000
# 1   tom      CA    None