2017-06-02 7 views
5

हम यहाँ दो डेटा फ्रेम है तुलना करने के लिए:कैसे दो dataframe और प्रिंट कॉलम कि स्केला में अलग हैं

उम्मीद dataframe:

+------+---------+--------+----------+-------+--------+ 
|emp_id| emp_city|emp_name| emp_phone|emp_sal|emp_site| 
+------+---------+--------+----------+-------+--------+ 
|  3| Chennai| rahman|9848022330| 45000|SanRamon| 
|  1|Hyderabad|  ram|9848022338| 50000|  SF| 
|  2|Hyderabad| robin|9848022339| 40000|  LA| 
|  4| sanjose| romin|9848022331| 45123|SanRamon| 
+------+---------+--------+----------+-------+--------+ 

और वास्तविक डेटा फ्रेम:

+------+---------+--------+----------+-------+--------+ 
|emp_id| emp_city|emp_name| emp_phone|emp_sal|emp_site| 
+------+---------+--------+----------+-------+--------+ 
|  3| Chennai| rahman|9848022330| 45000|SanRamon| 
|  1|Hyderabad|  ram|9848022338| 50000|  SF| 
|  2|Hyderabad| robin|9848022339| 40000|  LA| 
|  4| sanjose| romino|9848022331| 45123|SanRamon| 
+------+---------+--------+----------+-------+--------+ 

दो dataframes के बीच का अंतर है:

+------+--------+--------+----------+-------+--------+ 
|emp_id|emp_city|emp_name| emp_phone|emp_sal|emp_site| 
+------+--------+--------+----------+-------+--------+ 
|  4| sanjose| romino|9848022331| 45123|SanRamon| 
+------+--------+--------+----------+-------+--------+ 

हम छोड़कर फ़ंक्शन df1.except (df2) का उपयोग कर रहे हैं, हालांकि इसके साथ समस्या यह है कि यह पूरी पंक्तियों को अलग करती है। हम जो चाहते हैं वह देखना है कि उस पंक्ति में कौन से कॉलम अलग हैं (इस मामले में, "emp_name" से "रोमिन" और "रोमिनो" अलग हैं)। हमें इसके साथ जबरदस्त कठिनाई हो रही है और कोई मदद महान होगी।

+0

आंतरिक शामिल हों और emp_name दोनों रखें और उन सभी पंक्तियों को हटा दें जहां दोनों समान हैं। –

+0

क्या आप डेटा पर धारणाएं बना सकते हैं? उदाहरण के लिए आप मान सकते हैं कि emp_id अद्वितीय है? या यहां तक ​​कि बेहतर होना चाहिए और इसके डेटा पर केवल सत्यापन ही प्रासंगिक है? अन्यथा, क्यों इस पंक्ति emp_name में अलग और अन्य emp_id –

+0

इसी प्रकार के प्रश्न में से एक https://stackoverflow.com/questions/44807450/how-to-compare-two-dataframes-and-print-extra- से पूरी तरह से अलग नहीं है पंक्तियों में या तो-दो-डेटाफ्रेम/44810081 # 44810081 –

उत्तर

7

परिदृश्य है कि इसके बाद के संस्करण प्रश्न में वर्णन किया गया है से, यह लग रहा है कि अंतर की तरह कॉलम और नहीं पंक्तियों के बीच पाया गया है।

तो, आदेश है कि हम यहाँ चयनात्मक अंतर लागू करने के लिए है, जो हमें कॉलम विभिन्न मूल्यों है, मानों के साथ प्रदान करेगा की जरूरत है ऐसा करने के लिए में।

  1. पहले हम उम्मीद और वास्तविक dataframes में स्तंभों को खोजने की जरूरत:

    अब, चयनात्मक अंतर लागू करने के लिए हम इस तरह कोड कुछ लिखने के लिए की है।

    वैल कॉलम = df1.schema.fields.map (_। नाम)

  2. फिर हम अंतर columnwise लगाना होगा।

    वैल selectiveDifferences = columns.map (col => df1.select (col) .except (df2.select (col)))

  3. अंत में हम जो कॉलम पता लगाने के लिए की आवश्यकता होती है विभिन्न मूल्य

    selectiveDifferences.map (diff => {if (diff.count> 0) diff.show})

और, हम केवल कॉलम जो विभिन्न मान हैं मिल जाएगा। इस तरह:

+--------+ 
|emp_name| 
+--------+ 
| romino| 
+--------+ 

मुझे आशा है कि इससे मदद मिलती है!

+0

यह सही @ हिमांसहुलटियन है। आपका बहुत बहुत धन्यवाद।मेरे पास पहले दो कदम थे, लेकिन आखिरी महत्वपूर्ण कदम गायब था! एक फॉलो अप सवाल यह है कि, यदि वास्तविक डेटाफ्रेम में कोई अतिरिक्त पंक्ति है तो क्या होगा? (अपेक्षित 4 पंक्तियां हैं और वास्तविक में 5 है)। हम प्रत्येक स्तंभ को प्रिंट करने की बजाय पूरी पंक्ति को कैसे अलग करते हैं और प्रिंट करते हैं? – rominoushana

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