পাইথন পান্ডস দ্বিতীয় কলামের সারি সারি থেকে মান সহ এক কলামে NaN প্রতিস্থাপন করে


97

আমি পাইথনের এই পান্ডাস ডেটা ফ্রেমের সাথে কাজ করছি।

File    heat    Farheit Temp_Rating
   1    YesQ         75         N/A
   1    NoR         115         N/A
   1    YesA         63         N/A
   1    NoT          83          41
   1    NoY         100          80
   1    YesZ         56          12
   2    YesQ        111         N/A
   2    NoR          60         N/A
   2    YesA         19         N/A
   2    NoT         106          77
   2    NoY          45          21
   2    YesZ         40          54
   3    YesQ         84         N/A
   3    NoR          67         N/A
   3    YesA         94         N/A
   3    NoT          68          39
   3    NoY          63          46
   3    YesZ         34          81

Temp_Ratingকলামের মান সহ কলামের সমস্ত NaN গুলি প্রতিস্থাপন করতে হবে Farheit

এটি আমার প্রয়োজন:

File        heat    Temp_Rating
   1        YesQ             75
   1         NoR            115
   1        YesA             63
   1        YesQ             41
   1         NoR             80
   1        YesA             12
   2        YesQ            111
   2         NoR             60
   2        YesA             19
   2         NoT             77
   2         NoY             21
   2        YesZ             54
   3        YesQ             84
   3         NoR             67
   3        YesA             94
   3         NoT             39
   3         NoY             46
   3        YesZ             81

আমি যদি বুলিয়ান নির্বাচন করি তবে আমি একবারে এই কলামগুলির মধ্যে একটি বেছে নিতে পারি। সমস্যাটি হ'ল আমি যদি তখন তাদের সাথে যোগ দেওয়ার চেষ্টা করি তবে সঠিক ক্রম সংরক্ষণ করার সময় আমি এটি করতে সক্ষম নই।

আমি কীভাবে কেবল Temp_Ratingএসগুলির সাহায্যে সারিগুলি সন্ধান করতে NaNএবং Farheitকলামের একই সারিতে মানটি দিয়ে প্রতিস্থাপন করতে পারি?

উত্তর:


156

ধরে নেওয়া আপনার ডেটা ফ্রেমটি এতে রয়েছে df:

df.Temp_Rating.fillna(df.Farheit, inplace=True)
del df['Farheit']
df.columns = 'File heat Observations'.split()

প্রথমে যেকোন NaNমানের সাথে সম্পর্কিত মানটি প্রতিস্থাপন করুন df.Farheit'Farheit'কলামটি মুছুন । তারপরে কলামগুলির নাম পরিবর্তন করুন। ফলাফল এখানে DataFrame:

ফলাফল ডেটা ফ্রেম


এটি কীভাবে কাজ করবে যদি উভয় কলামে ডেটাটাইপ অবজেক্ট হয় এবং N / A এর পরিবর্তে, এই সারিতে খালি ঘর হয়?
অ্যাশিশ

বিবেচনা করার জন্য একটি সম্ভাব্য পন্থা: আপনি প্রথমে খালি স্ট্রিংটি প্রতিস্থাপন করতে NaNপারেন ( এখানে দেখুন ) এবং তারপরে এই পদ্ধতির ব্যবহার করতে পারেন ।
এডেজ

উত্তর নিখুঁত। আপনি যদি পান্ডাস সিনট্যাক্সে আরও বেশি থাকতে চান তবে আমি কলামগুলি মুছে ফেলার পরামর্শ দিয়েছি df.drop("Farheit", axis=1)তবে সম্ভবত ব্যক্তিগত পছন্দটি
মাইকেলএ

4
@ মিশেলএ সম্মতি dropএখন delপান্ডাস-জমিতে পছন্দ করে । যদি সাম্প্রতিক পান্ডা ব্যবহার করা df = df.drop(columns='Farheit')হয় তবে সংখ্যাসূচক অক্ষগুলির সংখ্যার উপরে প্রস্তাব দেওয়া হবে ।
জোনাথন ইউনিস

35

উপরে উল্লিখিত সমাধানগুলি আমার পক্ষে কার্যকর হয়নি। আমি যে পদ্ধতিটি ব্যবহার করেছি তা হ'ল:

df.loc[df['foo'].isnull(),'foo'] = df['bar']

4
এটি কি ব্যতিক্রম বা সহজভাবে কাজ করে না? ইসনুল () এর পরিবর্তে ইসনা () ব্যবহার করে দেখুন।
রুফাসভিএস

3

এই সমস্যা সমাধানের অন্য একটি উপায়,

import pandas as pd
import numpy as np

ts_df = pd.DataFrame([[1,"YesQ",75,],[1,"NoR",115,],[1,"NoT",63,13],[2,"YesT",43,71]],columns=['File','heat','Farheit','Temp'])


def fx(x):
    if np.isnan(x['Temp']):
        return x['Farheit']
    else:
        return x['Temp']
print(1,ts_df)
ts_df['Temp']=ts_df.apply(lambda x : fx(x),axis=1)

print(2,ts_df)

ফেরত:

(1,    File  heat  Farheit  Temp                                                                                    
0     1  YesQ       75   NaN                                                                                        
1     1   NoR      115   NaN                                                                                        
2     1   NoT       63  13.0                                                                                        
3     2  YesT       43  71.0)                                                                                       
(2,    File  heat  Farheit   Temp                                                                                   
0     1  YesQ       75   75.0                                                                                       
1     1   NoR      115  115.0
2     1   NoT       63   13.0
3     2  YesT       43   71.0)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.