P. Prunesquallor
P. Prunesquallor

Reputation: 571

python pandas - .replace - nothing happens

I have a df called all_data and within it a column called 'Neighborhood'. all_data["Neighborhood"].head() looks like

0       CollgCr
1       Veenker
2       CollgCr
3       Crawfor
4       NoRidge

I want to replace certain neighborhood names with 0, and others with 1 to get

0       1
1       1
2       1
3       0
4       1

So I did this:

all_data["Neighb_Good"] = all_data["Neighborhood"].copy().replace({'Neighborhood': {'StoneBr': 1, 'NrdigHt': 1,
                                                                                    'Veenker': 1, 'Somerst': 1,
                                                                                    'Timber': 1, 'CollgCr': 1,
                                                                                    'Blmngtn': 1, 'NoRidge': 1,
                                                                                    'Mitchel': 1, 'ClearCr': 1,
                                                                                    'ClearCr': 0, 'Crawfor': 0,
                                                                                    'SawyerW': 0, 'Gilbert': 0,
                                                                                    'Sawyer': 0, 'NPkVill': 0,
                                                                                    'NAmes': 0, 'NWAmes': 0,
                                                                                    'BrkSide': 0, 'MeadowV': 0,
                                                                                    'Edwards': 0, 'Blueste': 0,
                                                                                    'BrDale': 0, 'OldTown': 0,
                                                                                    'IDOTRR': 0, 'SWISU': 0,
                                                                                    }})

It doesn't give me an error, but nothing happens. Instead, all_data["Neighb_Good"] looks exactly like all_data["Neighborhood"].

I've been trying to figure it out for a while now and I swear I can't see what's the matter because I've used this same method yesterday on some other columns and it worked perfectly.

Upvotes: 0

Views: 155

Answers (2)

MaxU - stand with Ukraine
MaxU - stand with Ukraine

Reputation: 210832

UPDATE: you seem to need Series.map():

In [196]: df['Neighb_Good'] = df['Neighborhood'].map(d['Neighborhood'])

In [197]: df
Out[197]:
  Neighborhood  Neighb_Good
0      CollgCr            1
1      Veenker            1
2      CollgCr            1
3      Crawfor            0
4      NoRidge            1

using data set from comments:

In [201]: df["ExterQual_Good"] = df["ExterQual"].map(d)

In [202]: df
Out[202]:
  ExterQual  ExterQual_Good
0        TA               1
1        Fa               0
2        Gd               1
3        Po               0
4        Ex               1

Old answer:

Use DataFrame.replace() instead of Series.replace() if you have a nested dict, containing column names:

In [81]: df['Neighb_Good'] = df.replace(d)

In [82]: df
Out[82]:
  Neighborhood  Neighb_Good
0      CollgCr            1
1      Veenker            1
2      CollgCr            1
3      Crawfor            0
4      NoRidge            1

or use Series.replace() with a flat (not nested dict):

In [85]: df['Neighb_Good'] = df['Neighborhood'].replace(d['Neighborhood'])

In [86]: df
Out[86]:
  Neighborhood  Neighb_Good
0      CollgCr            1
1      Veenker            1
2      CollgCr            1
3      Crawfor            0
4      NoRidge            1

Upvotes: 2

Avij
Avij

Reputation: 694

How about

A   B   C
P   0   1   2
Q   3   4   5
R   6   7   8
S   9   10  11
T   12  13  14
U   15  16  17

data1.A.replace({0:"A"..and so on})

Upvotes: 1

Related Questions