Python 如果第一个函数失败,则应用第二个函数

Python 如果第一个函数失败,则应用第二个函数,python,pandas,numpy,Python,Pandas,Numpy,我对熊猫和努比还不熟悉。我有一个dataframe,我想通过对列的每一行应用一个函数来创建一个新列。让我们举一个简化的例子: import pandas as pd import numpy as np df = pd.DataFrame(columns=["names"], data=["Brussels", 2, "New York"]) def to_lower(value): try: return value.lower() except Attri

我对熊猫和努比还不熟悉。我有一个dataframe,我想通过对列的每一行应用一个函数来创建一个新列。让我们举一个简化的例子:

import pandas as pd
import numpy as np

df = pd.DataFrame(columns=["names"], data=["Brussels", 2, "New York"])

def to_lower(value):
    try:
        return value.lower()
    except AttributeError:
        return None

def to_string(value):
    return str(value)

df['lower_names'] = np.vectorize(to_lower)(df['names'])
这个操作非常有效。现在我想将
应用于_string()
然后将
应用于_lower()
仅适用于结果为无的“lower\u names”行(我不知道这是否非常清楚)

这似乎很基本,但我有麻烦。我可以详细说明我的尝试,但我害怕表现得像个白痴。。。也许我应该在玩这两个模块之前花一两周的时间来学习这两个模块,但在此期间,欢迎提出任何建议


编辑:@jezrael解决方案是正确的。。。举个简单的例子。现在,让我们想象一下,我想应用
np.vectorize(to_string)
函数,然后
np.vectorize(to_lower)
只对第一个结果为None的列“names”的行应用,最好的方法是什么?

我认为需要将
return None
更改为
return to_string(value)


谢谢你,耶斯雷尔,这是我努力的一部分。它在我的简化示例中效果很好,但在我的实际数据中效果不佳,我不知道为什么。。。同时,将问题简化为发布,这样可以帮助我澄清自己的反应。@EttoreRizza-我相信是这样。试着进行一些调试,或者试着解释更多的问题是什么。你是对的,当然,我把问题简化得太多,问错了问题。我会编辑它,如果没有其他人能更准确地回答我错误定义的问题,我会接受你的答案。嗯,
然后只在None上进行np.矢量化(降低到\u),你确定吗?需要将
None
替换为
string
None
?是的,好的示例很难,我理解。也许最好的方法是改变样品和期望的输出,你认为呢?
def to_lower(value):
    try:
        return value.lower()
    except AttributeError:
        return to_string(value)

def to_string(value):
    return str(value)

df['lower_names'] = np.vectorize(to_lower)(df['names'])


print (df['lower_names'].apply(type))
0    <class 'str'>
1    <class 'str'>
2    <class 'str'>
Name: lower_names, dtype: object
df['lower_names'] = df['names'].astype(str).str.lower()