मेरे पास यह df . है

    Var     Zip
0   x   803020
1   y   80302
2   z   803098

मैं इसे लूप के लिए लागू कर रहा हूं और डीएफ नहीं बदल रहा है, भले ही मुझे कोई त्रुटि नहीं मिल रही है

for x in df['Zip']:
    y = len(x)
    if y == 6:
         x = x[:-1]
            
print(df)

उत्पादन

    Var     Zip
0   x   803020
1   y   80302
2   z   803098

वांछित आउटपुट

    Var     Zip
0   x   80302
1   y   80302
2   z   80309
1
colin barclay 31 जिंदा 2021, 00:36

3 जवाब

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

आप इस उदाहरण की तरह df.apply का उपयोग कर सकते हैं:

df['Zip'] = df.apply(
    lambda row: row['Zip'][:-1] if len(row['Zip']) == 6 else row['Zip'],
    axis=1
)

print(df)

  Var    Zip
0   x  80302
1   y  80302
2   z  80309

PS: मैं मान रहा हूं कि Zip कॉलम को str के रूप में चिह्नित किया गया है। यदि नहीं, तो आप इसे इस तरह str में बदल सकते हैं:

df['Zip'] = df['Zip'].astype(str)

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

यदि आपको तेज़ दृष्टिकोण की आवश्यकता है तो आप इसका उपयोग कर सकते हैं:

df['Zip'] = df['Zip'].apply(lambda row: row[:-1] if len(row) == 6 else row)

और यहाँ कुछ बेंचमार्क हैं:

In [1]: %timeit df['Zip'] = df.apply(lambda row: row['Zip'][:-1] if len(row['Zip']) == 6 else row['Zip'], axis=1)                                                                                                  
714 µs ± 18.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [2]: %timeit df['Zip'] = df['Zip'].apply(lambda row: row[:-1] if len(row) == 6 else row)                                                                                                                                
274 µs ± 3.62 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
2
Chiheb Nexus 31 जिंदा 2021, 00:58

आप बस एक वेरिएबल x बना रहे हैं जो सेल वैल्यू का स्ट्रिंग-स्लाइस है, आप इसके साथ कुछ नहीं कर रहे हैं।

ये कोशिश करें।

for n in range(len(df['Zip'])):
    y = len(df['Zip'][n])
    if y == 6:
         df['Zip'][n] = df['Zip'][n][:-1]
-1
Paul Wilson 31 जिंदा 2021, 00:41

यह सर्वोत्तम प्रथाओं का पालन नहीं करता है। आपको कुछ इस तरह के लिए df.apply का उपयोग करना चाहिए:

df['Zip'] = df['Zip'].apply(lambda x: x[:-1] if len(x) == 6 else x)

यदि आपका कॉलम एक इंट है और एक इंट बने रहने की जरूरत है, तो यह भी काम करता है:

df['Zip'] = df['Zip'].apply(lambda x: int(str(x)[:-1]) if len(str(x)) == 6 else x)
2
Chiheb Nexus 31 जिंदा 2021, 01:04