मेरे पास एक बड़ा पांडा डेटाफ्रेम है, जहां मैं संचालन द्वारा समूह चला रहा हूं।

CHROM    POS    Data01    Data02 ......
1        ....................
1        ...................
2        ..................
2        ............
scaf_9   .............
scaf_9   ............

तो, मैं कर रहा हूं:

 my_data_grouped = my_data.groupby('CHROM')

 for chr_, data in my_data_grouped:
      do something in chr_
      write something from that chr_ data

छोटे डेटा में और डेटा में जहां कोई स्ट्रिंग प्रकार नहीं है CHROM यानी scaff_9 सब कुछ ठीक है। लेकिन, बहुत बड़े डेटा के साथ और scaff_9 के साथ, मुझे 2 के दो समूह मिल रहे हैं। यह वास्तव में एक त्रुटि संदेश नहीं है और यह गणना को प्रभावित नहीं कर रहा है। समस्या तब होती है जब मैं फ़ाइल में समूह द्वारा डेटा लिखता हूं; मुझे 2 (असमान रूप से विभाजित) के दो समूह मिल रहे हैं।

मेरे लिए इस समस्या की उत्पत्ति का पता लगाना बहुत कठिन होता जा रहा है, क्योंकि कोई त्रुटि संदेश नहीं है और छोटे डेटा के साथ यह अच्छी तरह से काम करता है। मेरी एकमात्र धारणा है:

  • क्या कुल डेटाफ़्रेम बनाम समूहीकृत डेटाफ़्रेम में लाइनों की संख्या की कोई निश्चित सीमा है जिसे pandas मॉड्यूल संभाल सकता है। इस समस्या का समाधान क्या है?
  • सभी 2 में से अधिकांश को पूर्णांक वस्तु के रूप में माना जाता है और कुछ (बाद के भाग) को स्ट्रिंग ऑब्जेक्ट के रूप में scaff_9 के करीब माना जाता है। क्या यह संभव है ?

क्षमा करें, मैं यहां केवल अपनी धारणा बना रहा हूं, और मेरे लिए समस्या की उत्पत्ति को जानना असंभव होता जा रहा है।

पोस्ट संपादित करें: मैंने groupby करने से पहले sort_by(['CHROM']) चलाने का भी प्रयास किया है, लेकिन समस्या अभी भी बनी हुई है।

समस्या का कोई भी संभावित समाधान।

धन्यवाद,

1
everestial007 27 मई 2018, 16:03

1 उत्तर

सबसे बढ़िया उत्तर

मेरी राय में डेटा समस्या है, जाहिर है कुछ सफेद जगह, इसलिए पांडा प्रत्येक समूह को अलग से संसाधित करता है।

समाधान पहले ट्रैलिंग व्हाइटस्पेस को हटा देना चाहिए:

df.index = df.index.astype(str).str.strip()

आप index के अद्वितीय स्ट्रिंग मान भी देख सकते हैं:

a = df.index[df.index.map(type) == str].unique().tolist()

यदि पहला कॉलम इंडेक्स नहीं है:

df['CHROM'] = df['CHROM'].astype(str).str.strip()

a = df.loc[df['CHROM'].map(type) == str, 'CHROM'].unique().tolist()

संपादित करें:

अंतिम अंतिम समाधान सरल था - str को कास्ट करना जैसे:

df['CHROM'] = df['CHROM'].astype(str)
1
jezrael 27 मई 2018, 18:54