繁体   English   中英

定义的函数不适用于数据框列

[英]Defined Function not Applying to Dataframe Column

我有以下正在运行的函数,但实际上并没有对我的数据框做任何事情。任何想法为什么这不起作用?

技术是一列,其中包含 AT&T、HP、NaN、SAP、GORDON 等值。我试图应用一个函数来将 Title 函数应用于每一行(例如 GORDON -> Gordon),但忽略那些带有首字母缩略词的行(例如 AT&T 不是 At&t,或 HP 代替 Hp)。 我还需要避免首字母缩略词恰好存在于更大的词中的情况(例如 Sapori Trattoria,而不是 SAPori Trattoria)

data = [['HP', 10], ['GORDON', 15], ['AT&T', 14], [NaN, 9]]
db = pd.DataFrame(data, columns = ['Technology', 'Age'])

acronyms = {'HP', 'GE', 'TBD', 'AT&T'}

def title_case_not_acronyms(orig_str):
    words = orig_str.split(" ")
    words_tc = [word if word in acronyms else word.title() for word in words]
    return " ".join(words)

db['Technology'] = db['Technology'].astype(str).apply(title_case_not_acronyms)

您的函数本质上是返回传递给它的相同字符串。

您需要返回" ".join(words_tc)而不是" ".join(words)

def title_case_not_acronyms(orig_str):
    words = orig_str.split(" ")
    words_tc = [word if word in acronyms else word.title() for word in words]
    return " ".join(words_tc)

您还可以使用:

df['Technology'] = df['Technology'].str.split(' ', expand=True).apply(lambda x: ' '.join([a if a in acronyms else a.title() for a in x.dropna()]), axis=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM