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


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.