Python 用字典的值替换字符串

Python 用字典的值替换字符串,python,pandas,dictionary,replace,key-value,Python,Pandas,Dictionary,Replace,Key Value,我会尽量简化。我有一个按州列出的企业列表的数据框架。有些州是缩写的,有些州不是。我想用缩写代替全州名,例如:新泽西州到新泽西州 我发现了一个很酷的模块,在字典中列出了所有的州及其缩写。我想做的是用缩写替换全名 代码: 现在我唯一能做的就是使用字符串并用State这个词替换它。我如何用字典中的缩写替换这个名字?我试过,想要像x=x.replacex,lst_of_abrv这样的东西 但它会出错,因为显然不能用dict_键替换 如果您能够解释如何将其应用于数据帧的C列,则需要额外注意以下是完整的解决

我会尽量简化。我有一个按州列出的企业列表的数据框架。有些州是缩写的,有些州不是。我想用缩写代替全州名,例如:新泽西州到新泽西州

我发现了一个很酷的模块,在字典中列出了所有的州及其缩写。我想做的是用缩写替换全名

代码:

现在我唯一能做的就是使用字符串并用State这个词替换它。我如何用字典中的缩写替换这个名字?我试过,想要像x=x.replacex,lst_of_abrv这样的东西 但它会出错,因为显然不能用dict_键替换


如果您能够解释如何将其应用于数据帧的C列,则需要额外注意以下是完整的解决方案:

# Note the difference here
statez = us.states.mapping('name', 'abbr')
lst_of_states = statez.keys()
lst_of_abbrv = statez.values()

def sentence_with_states_abbreviated(phrase):
    words = phrase.split()
    for (i,word) in enumerate(words):
        if word in lst_of_states:
            words[i] = statez[word]
    return ' '.join(words)

dfp['C'] = dfp['C'].apply(sentence_with_states_abbreviated)

以下是完整的解决方案:

# Note the difference here
statez = us.states.mapping('name', 'abbr')
lst_of_states = statez.keys()
lst_of_abbrv = statez.values()

def sentence_with_states_abbreviated(phrase):
    words = phrase.split()
    for (i,word) in enumerate(words):
        if word in lst_of_states:
            words[i] = statez[word]
    return ' '.join(words)

dfp['C'] = dfp['C'].apply(sentence_with_states_abbreviated)

首先,我将定义一个函数,该函数将替换字符串中状态的全名(如果存在)或返回原始字符串

def replace_states(company):
    # find all states that exist in the string
    state_found = filter(lambda state: state in company, statez.keys())

    # replace each state with its abbreviation
    for state in state_found:
        company = company.replace(state, statez[state])
    # return the modified string (or original if no states were found)
    return company
然后可以将此函数应用于数据帧的整个列

dfp['C'] = dfp['C'].map(replace_states)

首先,我将定义一个函数,该函数将替换字符串中状态的全名(如果存在)或返回原始字符串

def replace_states(company):
    # find all states that exist in the string
    state_found = filter(lambda state: state in company, statez.keys())

    # replace each state with its abbreviation
    for state in state_found:
        company = company.replace(state, statez[state])
    # return the modified string (or original if no states were found)
    return company
然后可以将此函数应用于数据帧的整个列

dfp['C'] = dfp['C'].map(replace_states)


x=x.replacex,statez[x]?不要将键和值分隔到不同的列表中。只要检查statez中是否有x。@BallpointBen这是我第一次去,但我得到了一个键错误。KeyError:“俄克拉何马州”在我上面的具体例子中,用if x替换if x在if u的州的州的州的州的州的州的州的州的州的州的州的州:同样,你也不会看到短语中反映的变化。。。你可以用谷歌搜索为什么。但是为了解决这个问题,在enumerateL:中为i,x做L=phrase.split,然后L[i]=x.replacex,statez[x]。然后,打印L而不是phrase.splitx=x.replacex,statez[x]?不要将键和值分隔到不同的列表中。只要检查statez中是否有x。@BallpointBen这是我第一次去,但我得到了一个键错误。KeyError:“俄克拉何马州”在我上面的具体例子中,用if x替换if x在if u的州的州的州的州的州的州的州的州的州的州的州的州:同样,你也不会看到短语中反映的变化。。。你可以用谷歌搜索为什么。但是为了解决这个问题,在enumerateL:中为i,x做L=phrase.split,然后L[i]=x.replacex,statez[x]。然后,打印L而不是短语。split@MattR:要完成解决方案,您需要将单词重新连接到带有“”的短语中,然后将其放入C列。我感谢您的帮助!我希望我能给出两个答案。@MattR:要完成解决方案,您需要将单词重新连接到带有“”的短语中,然后将其放入C列。我感谢您的帮助!我希望我能给你两张支票。这正是我要找的。我将更详细地介绍您用来实现此解决方案的步骤。映射和使用lambda。如果我能麻烦你的话,你有什么文档或链接我可以从中学习吗?@MattR pandas map在dataframe列/系列中。所以,有关lambda使用的问题,谢谢这些链接!我想我明白了。地图。但是你的lambda函数仍然让我感到震惊。。。我看不出它是如何工作的;特别是lambda州:公司中的州。填鸭式地喂我不是你的工作,但是如果你有时间,我将非常感谢你的帮助lambda定义了一个未命名的函数,它接受一个参数状态并返回公司中语句状态的布尔值。这可以等效地写成一个函数,比如def fstate:companystatez=us.states.mapping'name',abbr',您应该被设置这正是我想要的。我将更详细地介绍您用来实现此解决方案的步骤。映射和使用lambda。如果我能麻烦你的话,你有什么文档或链接我可以从中学习吗?@MattR pandas map在dataframe列/系列中。所以,有关lambda使用的问题,谢谢这些链接!我想我明白了。地图。但是你的lambda函数仍然让我感到震惊。。。我看不出它是如何工作的;特别是lambda州:公司中的州。填鸭式地喂我不是你的工作,但是如果你有时间,我将非常感谢你的帮助lambda定义了一个未命名的函数,它接受一个参数状态并返回公司中语句状态的布尔值。这可以等效地写成一个函数,比如def fstate:companystatez=us.states.mapping'name','abbr',您应该被设置