2017-01-03 16 views
5

मेरे पास दो कॉलम वाला एक डीएफ है और मैं NaN मानों को अनदेखा कर दोनों कॉलम जोड़ना चाहता हूं। पकड़ यह है कि कभी-कभी दोनों स्तंभों में NaN मान होते हैं, इस मामले में मैं चाहता हूं कि नया कॉलम भी NaN हो। यहाँ उदाहरण है:पांडा दो कॉलम को शून्य मानों के साथ जोड़ते हैं

df = pd.DataFrame({'foodstuff':['apple-martini', 'apple-pie', None, None, None], 'type':[None, None, 'strawberry-tart', 'dessert', None]}) 

df 
Out[10]: 
foodstuff type 
0 apple-martini None 
1 apple-pie None 
2 None strawberry-tart 
3 None dessert 
4 None None 

मैं fillna का उपयोग करें और इस का समाधान करने की कोशिश की:

df['foodstuff'].fillna('') + df['type'].fillna('') 

और मुझे मिल गया:

0  apple-martini 
1   apple-pie 
2 strawberry-tart 
3   dessert 
4     
dtype: object 

पंक्ति 4 एक खाली मूल्य बन गया है। मैं इस स्थिति में जो नहीं चाहता वह एक NaN मान है क्योंकि दोनों संयोजन कॉलम NaN हैं।

0  apple-martini 
1   apple-pie 
2 strawberry-tart 
3   dessert 
4   None  
dtype: object 

उत्तर

11

उपयोग fillna टी के साथ कॉलम वह मान अन्य स्तंभ जा रहा भरने:

df['foodstuff'].fillna(df['type']) 

जिसके परिणामस्वरूप उत्पादन:

0  apple-martini 
1   apple-pie 
2 strawberry-tart 
3   dessert 
4    None 
1

तुम हमेशा कोई नहीं के साथ नए स्तंभ में रिक्त स्ट्रिंग भर सकते हैं

import numpy as np 

df['new_col'].replace(r'^\s*$', np.nan, regex=True, inplace=True) 

पूरा कोड:

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'foodstuff':['apple-martini', 'apple-pie', None, None, None], 'type':[None, None, 'strawberry-tart', 'dessert', None]}) 

df['new_col'] = df['foodstuff'].fillna('') + df['type'].fillna('') 

df['new_col'].replace(r'^\s*$', np.nan, regex=True, inplace=True) 

df 

उत्पादन: एक पर

foodstuff type new_col 
0 apple-martini None apple-martini 
1 apple-pie None apple-pie 
2 None strawberry-tart strawberry-tart 
3 None dessert dessert 
4 None None NaN 
1
  • fillna एक साथ दोनों स्तंभ
  • sum(1) उन्हें
  • replace('', np.nan)
जोड़ने के लिए "" अगर एक None तो यही तर्क संयोजन पर लागू किया जाता है (जहां परिणाम None हो सकता है अगर संयोजन है

df['foodstuff'].combine(df['type'], lambda a, b: ((a or "") + (b or "")) or None, None) 

(a or "") रिटर्न:

df.fillna('').sum(1).replace('', np.nan) 

0  apple-martini 
1   apple-pie 
2 strawberry-tart 
3   dessert 
4    NaN 
dtype: object 
2

आप combine विधि एक lambda साथ उपयोग कर सकते हैं एक खाली स्ट्रिंग है)।

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