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


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.