पायथन पंडों ने एक कॉलम में NaN को दूसरे कॉलम की संबंधित पंक्ति से मान से प्रतिस्थापित किया


103

मैं पायथन में इस पंडों डेटाफ्रेम के साथ काम कर रहा हूं।

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कॉलम की एक ही पंक्ति में मूल्य के साथ बदल सकता हूं ?

जवाबों:


165

अपना DataFrame मान रहा है df:

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

पहले किसी भी NaNमान को उसी के मान से बदलें df.Farheit'Farheit'कॉलम हटाएं । फिर कॉलम का नाम बदलें। यहाँ परिणाम है DataFrame:

जिसके परिणामस्वरूप DataFrame


इसके साथ कैसे काम करें अगर दोनों कॉलम डेटाटाइप ऑब्जेक्ट हैं और एन / ए के बजाय, यह उस पंक्ति में खाली सेल है?
आशीष

विचार करने के लिए एक संभव दृष्टिकोण: आप पहले खाली स्ट्रिंग को NaN( यहां देखें ) बदल सकते हैं और फिर इस दृष्टिकोण का उपयोग कर सकते हैं।
17

जवाब एकदम सही है। यदि आप पांडा सिंटैक्स में अधिक रहना पसंद करते हैं तो मैं कॉलम को हटाने का सुझाव df.drop("Farheit", axis=1)
दूंगा

1
@MichaelA सहमत dropअब delपंडों-भूमि में पसंद करते हैं । यदि हाल के पंडों का उपयोग किया जाता है, तो df = df.drop(columns='Farheit')संख्यात्मक अक्ष संख्या पर सिफारिश की जाएगी ।
जोनाथन Eunice

35

उपर्युक्त उपाय मेरे लिए कारगर नहीं हुए। मेरे द्वारा उपयोग की जाने वाली विधि थी:

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

3
क्या यह एक अपवाद बढ़ा या बस काम नहीं आया? Isnull () के बजाय isna () आज़माएं।
रुफुसवीस

4

इस समस्या को हल करने का एक अन्य तरीका,

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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.