我有一个数据框,其中一列('实体)包含国家和非国家实体的各种名称。我需要清理列,因为字符串值(由手动数据输入提供)都是小写的(中国而不是中国)。我不能只对列执行.title()操作,因为有些字符串值我不想做任何事情(例如,不应该把某些东西变成AL Something)。
我无法创建一个功能来帮助我解决这个问题,并且可以使用社区的一些指导。在过去,我使用字典帮助使用正确的字符串来帮助映射/替换不正确的字符串,我仍然可以恢复到这种方式,但我认为创建此函数可能更直接,更有效,而且我想挑战自己。但是当我执行函数时,实体列没有发生任何变化。提前谢谢!
implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')
答案 0 :(得分:0)
行entities
中的entities = df['entity']
与行entities
中的def title_fix(entities):
不是同一个变量。第二个entities
变量是函数title_fix
的参数,它只存在于函数中。它会将您传递给title_fix
的{{1}}调用的任何参数转换为df
。
尝试使用此功能代替您的功能:
# A list of entity names to leave alone (must exactly match character-for-character)
myString = ['al Group1', 'al Group2']
# Apply title case to every entity NOT in myString
df['entity'] = df['entity'].apply(lambda x: x if x in myString else x.title())
# Print the modified DataFrame
df
请注意,此解决方案要求myString
中的每个字符串与df['entity']
中的目标字符串匹配,否则目标字符串将不会被替换。
答案 1 :(得分:0)
您的代码有多个错误,例如拼写和缩进。固定代码:
myString = ['al Group1', 'al Group2']
entities = df['entity']
def title_fix(entities):
new_titles = []
for entity in entities:
if entity in myString:
new_titles.append(entity)
else:
new_titles.append(entity.title())
return new_titles
df['entity'] = title_fix(entities)
然而,您想要实现的目标可以在单行中完成。我想出了3个解决方案。我不太了解大熊猫,我不知道这些解决方案之间的性能差异,但在这里它们是。
ignored
比myString
更有意义,所以我会使用它。
ignored = ['al Group1', 'al Group2']
第一个解决方案:
df['entity'] = df['entity'].apply(lambda x: x.title() if x not in ignored else x)
第二
df.entity[~df.entity.isin(ignored)] = df.entity.str.title()
第三
df.loc[~df.entity.isin(ignored), 'entity'] = df.entity.str.title()