मैं पांडा डीएफ डेटाफ्रेम में कुछ पंक्तियों में डैश से पहले स्ट्रिंग का हिस्सा निकालने की कोशिश कर रहा हूं। समस्या यह है कि जब मैं निकालने() फ़ंक्शन का उपयोग करता हूं तो यह डैश से पहले स्ट्रिंग का हिस्सा निकालता है लेकिन पंक्तियों में NaN मान डालता है जहां कोई डैश मौजूद नहीं होता है।

डेटा उदाहरण:

I2311-A45
Z13A-SA87 
CSSSAA1-4 
LKJ3B-15
1AAAZ0-14
ASHENSKFR
ASD
AFSDFGRE

तो मेरे पास df['values'] उदाहरण कॉलम कहां है। मेरे प्रयास हैं:

df['values'] = df['values'].str.extract('(.*)-')

आउटपुट:

I2311
Z13A 
CSSSAA1 
LKJ3B
1AAAZ0
NaN
NaN
NaN

और यह मुझे इसके बजाय 3 NaN मान देता है

ASHENSKFR
ASD
AFSDFGRE

आगे जो मैं कोशिश कर रहा था वह लैम्ब्डा के साथ df.loc शर्तों और लागू() फ़ंक्शन का उपयोग कर रहा था लेकिन उसी अपवाद के साथ:

एक श्रृंखला का सत्य मूल्य अस्पष्ट है। a.empty, a.bool(), a.item(), a.any() या a.all() का प्रयोग करें।

df['values'] = df['values'].apply(lambda x: df['values'].str.extract('(.*)-') if df['values'].str.contains('-') else None)

अग्रिम मदद के लिए धन्यवाद!

0
vladpoverin 6 जिंदा 2022, 17:27

1 उत्तर

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

आप बस Series.str.split. यह उस मान को विभाजित कर देगा जहां - मौजूद है, अन्यथा मान को वैसे ही छोड़ देगा।

In [134]: df['values'].str.split('-').str[0]
Out[134]: 
0        I2311
1         Z13A
2      CSSSAA1
3        LKJ3B
4       1AAAZ0
5    ASHENSKFR
6          ASD
7     AFSDFGRE
Name: values, dtype: object
3
Mayank Porwal 6 जिंदा 2022, 17:31
1
नरक, यह मेरे दिमाग में नहीं आया अहा उत्तर के लिए धन्यवाद!
 – 
vladpoverin
6 जिंदा 2022, 17:34