我有一个df,这里有太多的复制,但逻辑如下:
data = {'ID': ['12AX', '7YTQ','ZA77'],
'Value_1': [19, 'Not applicable', 33],
'Status': ['Not Applicable','Not Applicable','Not Applicable']
'Value_2': [13,4,15],
'Value_3': ['Not Applicable', 'Not Applicable', 102.7]
'Category': ['AAA', 'AAA', 'BA']
}
df = pd.DataFrame(data)
字符串
我尝试创建一个名为Sum
的新列,只使用现有列的一个子集(比如Value_1
、Value_2
、Value_3
),并忽略任何行中可能存在的任何文本。例如,第一行的Sum
将是19+13 = 32
,列Value_3
中的字符串值被忽略,因为它表示Not Applicable
。
到目前为止,我的函数是这样的,但它要么返回None
,要么返回0
,我不知道为什么。
def safe_sum(row):
try:
float_numbers = [float(x) for x in row if isinstance(x, (int, float))]
return sum(float_numbers)
except (ValueError, TypeError):
return None
df['Sum'] = df[['Value_1','Value_2','Value_3'].apply(safe_sum, axis=1)
型
有人知道我哪里做错了吗?
1条答案
按热度按时间x4shl7ld1#
您的解决方案工作正常。
另一个解决方案:
字符串
如果你只需要列的子集,你可以把最后一行改为:
型