पंडों के डेटाफ्रेम कॉलम में कुछ मानों को दूसरे मूल्य के साथ बदलना


92

मेरे पास एक पंडों का डेटाफ्रेम डीएफ है जैसा कि नीचे सचित्र है:

BrandName Specialty
A          H
B          I
ABC        J
D          K
AB         L

मैं ए ब्रांड द्वारा 'एबीसी' और 'एबी' को ए ब्रांड में बदलना चाहता हूं। क्या कोई इसके साथ मदद कर सकता है?

जवाबों:


144

सबसे आसान तरीका replaceस्तंभ पर विधि का उपयोग करना है । तर्क उन चीज़ों की एक सूची है जिन्हें आप बदलना चाहते हैं (यहां ['ABC', 'AB']) और आप उन्हें क्या बदलना चाहते हैं ( 'A'इस मामले में स्ट्रिंग ):

>>> df['BrandName'].replace(['ABC', 'AB'], 'A')
0    A
1    B
2    A
3    D
4    A

यह मानों की एक नई श्रृंखला बनाता है, इसलिए आपको इस नए कॉलम को सही कॉलम नाम पर असाइन करने की आवश्यकता है:

df['BrandName'] = df['BrandName'].replace(['ABC', 'AB'], 'A')

10
एक मुश्किल बात अगर आपके डेटाटाइप्स को डेटाफ़्रेम में गड़बड़ कर दिया जाता है (यानी वे तार की तरह दिखते हैं लेकिन नहीं हैं), उपयोग करें: df ['BrandName'] = df ['BrandName']। str.replace (['ABC', 'AB) '],' ए ')
स्की_सक्वा

3
मुझे भी पास होना था inplace=True, नहीं तो यह बदल रहा था।
गोंकेलो पेरेज

43

बदलने के

DataFrameऑब्जेक्ट में शक्तिशाली और लचीली replaceविधि है:

DataFrame.replace(
        to_replace=None,
        value=None,
        inplace=False,
        limit=None,
        regex=False, 
        method='pad',
        axis=None)

ध्यान दें, यदि आपको जगह में परिवर्तन करने की आवश्यकता है, तो विधि के inplaceलिए बूलियन तर्क का उपयोग करें replace:

जगह में

जगह : बूलियन, डिफ़ॉल्ट False यदि True, जगह में। नोट: यह इस ऑब्जेक्ट पर किसी भी अन्य विचार को संशोधित करेगा (उदाहरण के लिए एक स्तंभ एक DataFrame)। यदि यह है तो कॉलर लौटाता है True

टुकड़ा

df['BrandName'].replace(
    to_replace=['ABC', 'AB'],
    value='A',
    inplace=True
)

1
स्निपेट उदाहरण के लिए धन्यवाद, लेकिन यह काम नहीं करता है। एक के लिए, अगर वहाँ नहीं है = to_replace हिस्से में त्रुटियां हैं। दूसरे के लिए, यह कोई प्रतिस्थापन नहीं कर रहा है। वैसे भी v 0.20.1 में प्रतिस्थापित कार्यक्षमता का कार्यशील उदाहरण प्राप्त करने के लिए क्या है?
एलिसन एस

क्या replaceअच्छा पैमाना नहीं है? पूर्णांक की ~ 5 मिलियन पंक्तियों को प्रतिस्थापित करते समय यह मेरी मशीन को क्रैश कर देता है। इसके आसपास कोई रास्ता?
लड़का

13

लोकल फ़ंक्शन का उपयोग कई मानों को बदलने के लिए किया जा सकता है, इसके लिए प्रलेखन: लोक

df.loc[df['BrandName'].isin(['ABC', 'AB'])]='A'

6

यह समाधान मौजूदा डेटाफ़्रेम को स्वयं बदल देगा:

mydf = pd.DataFrame({"BrandName":["A", "B", "ABC", "D", "AB"], "Speciality":["H", "I", "J", "K", "L"]})
mydf["BrandName"].replace(["ABC", "AB"], "A", inplace=True)

3

डेटा फ़्रेम बनाया गया:

import pandas as pd
dk=pd.DataFrame({"BrandName":['A','B','ABC','D','AB'],"Specialty":['H','I','J','K','L']})

अब DataFrame.replace()फ़ंक्शन का उपयोग करें:

dk.BrandName.replace(to_replace=['ABC','AB'],value='A')

3

बस यह दिखाना चाहता था कि ऐसा करने के 2 मुख्य तरीकों के बीच कोई प्रदर्शन अंतर नहीं है:

df = pd.DataFrame(np.random.randint(0,10,size=(100, 4)), columns=list('ABCD'))

def loc():
    df1.loc[df1["A"] == 2] = 5
%timeit loc
19.9 ns ± 0.0873 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)


def replace():
    df2['A'].replace(
        to_replace=2,
        value=5,
        inplace=True
    )
%timeit replace
19.6 ns ± 0.509 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

2

आप विधि dictको भी पास कर सकते हैं pandas.replace:

data.replace({
    'column_name': {
        'value_to_replace': 'replace_value_with_this'
    }
})

इसका यह फायदा है कि आप एक साथ कई कॉलम में कई मान बदल सकते हैं , जैसे:

data.replace({
    'column_name': {
        'value_to_replace': 'replace_value_with_this',
        'foo': 'bar',
        'spam': 'eggs'
    },
    'other_column_name': {
        'other_value_to_replace': 'other_replace_value_with_this'
    },
    ...
})

1
इस उत्तर के लिए Ty। मुझे ठीक इसी की तलाश थी। :)
निकपे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.