मान लें कि मेरे पास एकाधिक डेटाफ़्रेम हैं और प्रत्येक में समान कॉलम नाम हैं, हालांकि उन स्तंभों की सामग्री आवश्यक रूप से समान नहीं है।

मैंने प्रत्येक डेटाफ्रेम के कॉलम पर लूप करने की कोशिश की और कॉलम को नाम से हटा दिया लेकिन यह काम नहीं किया। अगर मैं व्यक्तिगत रूप से प्रत्येक डेटाफ्रेम पर एक ही विधि का प्रयास करता हूं तो यह काम करता है

मेरे पास निम्नलिखित डेटाफ्रेम हैं:

import pandas as pd
df1 = pd.DataFrame({'user': ['John', 'Joe', 'Alice'], 
                   'income': [40000, 50000, 42000],
                   'Unnamed: 0': [1, 2, 3]})
df2 = pd.DataFrame({'user': ['Luke', 'Paul', 'Jane'], 
                   'income': [40000, 50000, 42000],
                   'Unnamed: 0': [1, 2, 3]})

df3 = pd.DataFrame({'user': ['Sue', 'Haley', 'Erica'], 
                   'income': [40000, 50000, 42000],
                   'Unnamed: 0': [1, 2, 3]})

मैंने यह कोशिश की, सफलता के बिना:

dataframes = [df1, df2, df3]
for df in dataframes:
    for column in df.columns:
        if "Unnamed" in column:
            df = df.drop(column, axis = 1)

इसने dataframes में कोई भी आइटम नहीं बदला।

हालांकि, अगर मैं कहूं:

df3 = df3.drop("Unnamed: 0", axis = 1)

यह लौटता है:

pd.DataFrame({'user': ['Sue', 'Haley', 'Erica'], 
                   'income': [40000, 50000, 42000]})

ध्यान दें, यह केवल df3 ही नहीं, df1 और df2 के लिए भी काम करता है।

क्या कोई सूची में सभी डेटाफ्रेम से अवांछित कॉलम को प्रत्येक के लिए एक पंक्ति लिखे बिना छोड़ने में मदद कर सकता है?

0
spies006 8 जिंदा 2017, 01:17

1 उत्तर

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

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

for df in dataframes:
    for column in df.columns:
        if "Unnamed" in column:
            df.drop(column, axis = 1, inplace=True)

समस्या यह है कि आप नए डेटाफ़्रेम बना रहे थे, और उन्हें df को असाइन कर रहे थे जिसे तुरंत हटा दिया गया था

6
tato 8 जिंदा 2017, 01:22
4
मुझे लगता है कि हम दूसरे (नेस्टेड) ​​लूप से छुटकारा पा सकते हैं: for df in dataframes: df.drop(df.columns[df.columns.str.contains('Unnamed:')], 1, inplace=True)
 – 
MaxU
8 जिंदा 2017, 01:29
उत्तम! इसलिए, inplace=True प्रत्येक संबंधित आइटम के स्थान पर dataframes परोक्ष रूप से df लौटा रहा है
 – 
spies006
8 जिंदा 2017, 01:36
बिल्कुल नहीं, @berrypy, inplace=True DataFrame ऑब्जेक्ट को संशोधित कर रहा है जो कि प्रत्येक लूप पुनरावृत्ति (यानी मूल डेटाफ़्रेम) में df द्वारा इंगित किया गया है, एक नया बनाने के बजाय
 – 
tato
8 जिंदा 2017, 01:46