如何将具有if语句的功能同时应用于多个数据框列

时间:2019-06-10 17:02:35

标签: python pandas dataframe lambda

我有一个由数字字符串和/或多列中的空字符串组成的数据框,我想将这些列从字符串转换为“ int”数据类型。在此之前,我想将空字符串转换为“ -1”(int或字符串版本-1;这都没有关系)。

我试图同时将lambda函数应用于多个列以转换空字符串,但遇到错误“'系列的真值不明确。请使用a.empty,a.bool(),a。 item(),a.any()或a.all()。”,“发生在索引Temperature(F)上”'

我在下面发布了一个虚拟示例,以说明我要如何处理实际的数据框,但是它不起作用。当然,有一种变通方法是在“ for”循环中遍历每个列,但是我怀疑有一个更干净的解决方案。

df = pd.DataFrame({'Temperature(F)':['30','40',''],'Gust':['','5','10']})
numericCols = ['Temperature(F)','Gust']
df[numericCols]=fTable[numericCols].apply(lambda x:-1 if x=='' else x)
df[numericCols] = fTable[numericCols].astype('int')
'''

As described, I get the error message "'The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index Temperature(F)'" when I run this.

1 个答案:

答案 0 :(得分:1)

在一行中不使用Apply

df[numericCols].apply(pd.to_numeric, errors='coerce').fillna(value=-1)
# Out:
#    Temperature(F)  Gust
# 0            30.0  -1.0
# 1            40.0   5.0
# 2            -1.0  10.0