繁体   English   中英

如何有条件地修改数据框列中的字符串值-Python / Pandas

[英]How to conditionally modify string values in dataframe column - Python/Pandas

我有一个数据框,其中的一栏(实体)包含国家和非国家实体的各种名称。 我需要清理列,因为字符串值(由手动数据输入提供)都是小写的(china而不是China)。 我不能只对列执行.title()操作,因为有些字符串值我什么都不做(例如,al Something不应变成AL Something)。

我在创建一个函数来解决此问题时遇到了麻烦,可以使用社区中的一些指导。 过去,我曾使用词典来帮助将不正确的字符串映射/替换为正确的字符串,但我仍然可以恢复这种处理方式,但是我认为创建此函数可能更直接,更有效,而且我想挑战自己。 但是当我执行函数时,实体列没有发生任何变化。 提前致谢!

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(myString)
        else:
           new_title.append(entity.title())
        return new_title

title_fix(df)

entities在线路entities = df['entity']不一样的变量作为entities的线def title_fix(entities): 第二个entities变量是函数title_fix的参数,并且仅存在于函数中。 它接受您传递给title_fix的调用中传递的任何参数,即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']中的目标字符串完全匹配,否则将不替换目标字符串。

您的代码有几个错误,例如拼写和缩进。 固定代码:

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种解决方案。 我不太了解熊猫,我也不知道这些解决方案之间的性能差异,但是在这里。

ignoredmyString更有意义,因此我将使用它。

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()

暂无
暂无

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

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