পান্ডাস ডেটা ফ্রেম কলামে কয়েকটি মানকে অন্য মান দিয়ে প্রতিস্থাপন করা হচ্ছে


92

নীচে চিত্রিত হিসাবে আমার কাছে একটি পান্ডাস ডেটা ফ্রেম ডিএফ রয়েছে:

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

আমি এ। এর কলাম ব্র্যান্ডনামে 'এবিসি' এবং 'এবি' প্রতিস্থাপন করতে চাই কেউ কি এর সাহায্য করতে পারে?

উত্তর:


143

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 ['ব্র্যান্ডনাম'] = ডিএফ ['ব্র্যান্ডনাম']। স্ট্রিংরেপ্লেস (['এবিসি', 'এবি '],' এ ')
স্কি_স্কোয়

4
আমাকেও পাস করতে হবে inplace=True, অন্যথায় এটি পরিবর্তন হচ্ছে না was
গোনালো পেরেস 龚燿禄

43

প্রতিস্থাপন

DataFrameবস্তুর শক্তিশালী এবং নমনীয় replaceপদ্ধতি রয়েছে:

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

দ্রষ্টব্য, যদি আপনাকে জায়গায় পরিবর্তন করতে হয় তবে পদ্ধতির inplaceজন্য বুলিয়ান যুক্তিটি ব্যবহার করুন replace:

জায়গায়

ইনপ্লেস : বুলিয়ান, ডিফল্ট False যদি Trueজায়গায় থাকে। দ্রষ্টব্য: এটি এই অবজেক্টে অন্য কোনও মতামত সংশোধন করবে (উদাহরণস্বরূপ একটি কলাম একটি ডেটাফ্রেম গঠন করে)। যদি থাকে তবে কলারকে ফেরত দেয় True

স্নিপেট

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

4
স্নিপেট উদাহরণের জন্য ধন্যবাদ, তবে এটি কার্যকর হয় না। একটির জন্য, যদি টো_র্লেস অংশে কোনও = থাকে না তবে এটি ত্রুটিযুক্ত হয়ে যায়। অন্যটির জন্য, এটি কোনও প্রতিস্থাপন করছে না। ভি 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'
    },
    ...
})

4
এই উত্তরের জন্য Ty। এটা ঠিক আমি যা খুঁজছিলাম ছিল। :)
নিকএসপি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.