2015-05-20 16 views
22

मैं एक कॉलम में किसी अन्य कॉलम के मान के साथ लापता मान भरना चाहता हूं।पांडा - एक अन्य कॉलम के साथ फिलना

मैंने पढ़ा है कि प्रत्येक पंक्ति के माध्यम से लूपिंग बहुत खराब अभ्यास होगी और यह सब कुछ एक ही समय में करना बेहतर होगा, लेकिन मुझे यह पता नहीं चला कि fillna विधि के साथ इसे कैसे किया जाए।

पहले डेटा

Day Cat1 Cat2 
1 cat mouse 
2 dog elephant 
3 cat giraf 
4 NaN ant 

डाटा के बाद

Day Cat1 Cat2 
1 cat mouse 
2 dog elephant 
3 cat giraf 
4 ant ant 

उत्तर

45

आप fillna के लिए इस स्तंभ प्रदान कर सकते हैं (docs देखें), इसे भरने की अनुक्रमित मिलान पर उन मूल्यों का उपयोग करेगा:

In [17]: df['Cat1'].fillna(df['Cat2']) 
Out[17]: 
0 cat 
1 dog 
2 cat 
3 ant 
Name: Cat1, dtype: object 
नहीं
+0

अच्छा! मुझे नहीं पता था कि 'भरना' एक श्रृंखला लेता है। –

+0

धन्यवाद! मैंने सोचा कि सेरी को एनए मूल्यों की संख्या का सटीक आकार होना चाहिए था। – xav

4

आप

df.Cat1 = np.where(df.Cat1.isnull(), df.Cat2, df.Cat1) 

कर सकता है आरएचएस पर समग्र निर्माण the ternary pattern from the pandas cookbook (यह किसी भी मामले में पढ़ने के लिए भुगतान करता है) का उपयोग करता है । यह a? b: c का वेक्टर संस्करण है।

+0

समाधान मैं इस समस्या के लिए इस्तेमाल किया लेकिन बहुत ही रोचक पैटर्न! धन्यवाद! – xav

4

बस method के बजाय value पैरामीटर का उपयोग:

In [20]: df 
Out[20]: 
    Cat1  Cat2 Day 
0 cat  mouse 1 
1 dog elephant 2 
2 cat  giraf 3 
3 NaN  ant 4 

In [21]: df.Cat1 = df.Cat1.fillna(value=df.Cat2) 

In [22]: df 
Out[22]: 
    Cat1  Cat2 Day 
0 cat  mouse 1 
1 dog elephant 2 
2 cat  giraf 3 
3 ant  ant 4 
+0

उत्तर के लिए धन्यवाद! जोरीस द्वारा वर्णित विधि के बजाय मूल्य का उपयोग करने के लिए यह क्या बदलता है? – xav

+0

@xav 'value' पहला पैरामीटर है, इसलिए जॉरी वास्तव में एक ही चीज़ कर रहा है। जैसा कि उन्होंने कहा, [डॉक्स] देखें (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.fillna.html)। – chrisaycock

+0

हां, डॉकस्ट्रिंग थोड़ा भ्रामक है क्योंकि पहले 'विधि' सूचीबद्ध है। – joris

संबंधित मुद्दे