Spatial Digger
Spatial Digger

Reputation: 1993

replacing values in dataframe using a dictionary

I'm trying to do a 'find and replace' in a dataframe data on a specific column type1 using terms stored in a dictionary. I first make all existing values in the dataframe to be uppercase. I create the dictionary mdata, I make sure they are all uppercase as well. Then through the for syntax I loop through the items in mdata replacing accordingly. This code used to work before I turned it into a function.

Any ideas where I've gone wrong?

def to_fish(data, fish):
    data['type1'] = data['type1'].str.upper()
    if fish == 'monument':
        mdata = {
            'natural': 'NATURAL FEATURe',
            'DITCH TERMINUS': 'DITCH',
            'DITCH RECUT': 'DITCH',
            'NATURAL_lyr': 'NATURAL FEATURE'
        }
        mdata = {k.upper(): v.upper() for k, v in mdata.items()}

        for copa, fish in mdata.items():
            data = data.str.rstrip().str.lstrip().replace(copa, fish, regex=True)

Upvotes: 0

Views: 117

Answers (2)

Joe Ferndz
Joe Ferndz

Reputation: 8508

You can give this to get the results.

import pandas as pd
df = pd.DataFrame({'A':['Hello','Bye','OK','Hi','Bonjour'],
                   'B':['Jack','Jill','Bryan','Kevin','Susan'],
                   'C':['High','High','Middle','Middle','Low']})
print (df)
lookup_dict = {'High':'California','Middle':'Chicago','Low':'New York'}
df['C'] = df['C'].map(lookup_dict)
print (df)

Before:

         A      B       C
0    Hello   Jack    High
1      Bye   Jill    High
2       OK  Bryan  Middle
3       Hi  Kevin  Middle
4  Bonjour  Susan     Low

After:

         A      B           C
0    Hello   Jack  California
1      Bye   Jill  California
2       OK  Bryan     Chicago
3       Hi  Kevin     Chicago
4  Bonjour  Susan    New York

Upvotes: 0

foglerit
foglerit

Reputation: 8269

Try the map method:

data['type1'] = data['type1'].map(mdata)

Upvotes: 2

Related Questions