[英]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.