पांडा डेटाफ्रेम सशर्त स्ट्रिंग विभाजन - पायथन, पांडा

मेरे डेटाफ्रेम में इन्फ्लूएंजा वायरस नामों का एक स्तंभ है। यहां मौजूद नाम प्रारूपों का एक प्रतिनिधि नमूनाकरण है:

  1. (ए / मिस्र / 84/2001 (H1N2))
  2. ए / ब्राजील / 1759/2004 (H3N2)
  3. ए / अर्जेंटीना / 126/2004

मुझे केवल तनाव नामों से ए / COUNTRY / NUMBER / वर्ष प्राप्त करने में दिलचस्पी है, उदा। ए / ब्राजील / 1759/2004। मैंने कोशिश करने की कोशिश की है:

df["Strain Name"] = df["Original Name"].str.split("(")

हालांकि, अगर मैं एक्सेस करने का प्रयास करता हूं .str[0], तो मुझे केस # 1 याद आती है। यदि मैं करता हूँ .str[1], मुझे केस 2 और 3 याद आती है।

क्या कोई समाधान है जो सभी तीन मामलों के लिए काम करता है? या डेटा फ्रेम में प्रत्येक पंक्ति पर फिर से घुमाने के बिना, स्ट्रिंग स्प्लिट में एक शर्त लागू करने का कोई तरीका है?

उत्तर:

उत्तर № 1 के लिए 1

तो, EdChum की सिफारिश के आधार पर, मैं यहाँ अपना जवाब पोस्ट करूँगा।

इस समस्या से निपटने के लिए आवश्यक न्यूनतम डाटा फ्रेम:

Index    Strain Name               Year
0        (A/Egypt/84/2001(H1N2))   2001
1        A/Brazil/1759/2004(H3N2)  2004
2        A/Argentina/126/2004      2004

केवल कोष्ठकों के अंदर या अन्य किसी चीज़ के बिना, तनाव नाम प्राप्त करने के लिए कोड:

df["Strain Name"] = df["Strain Name"].str.split("(").apply(lambda x: max(x, key=len))

यह कोड यहाँ विशेष रूप से लिखे गए केस के लिए काम करता है, क्योंकि यह ट्रिक है कि ओपनिंग कोष्ठकों द्वारा विभाजित होने के बाद पृथक "स्ट्रेन नेम" सबसे लंबा स्ट्रिंग है ("(”) मूल्य।


संबंधित सवाल
सबसे लोकप्रिय