我为我的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值,如何获取所需的输出?
答案 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