प्रत्येक कॉलम नाम में एक प्रत्यय (या उपसर्ग) कैसे जोड़ें?


89

मैं _xप्रत्येक कॉलम नाम में प्रत्यय जोड़ना चाहता हूं जैसे:

featuresA = myPandasDataFrame.columns.values + '_x'

मैं यह कैसे करु? इसके अतिरिक्त, यदि मैं x_एक प्रत्यय के रूप में जोड़ना चाहता था, तो समाधान कैसे बदलेगा?

जवाबों:


124

आप एक listसमझ का उपयोग कर सकते हैं :

df.columns = [str(col) + '_x' for col in df.columns]

एक अन्य उत्तर में उल्लिखित तरीके .add_suffix()और अंतर्निहित तरीके भी हैं .add_prefix()


यह सबसे सरल और सुरुचिपूर्ण उत्तर है!
जिंहुआ वांग

165

मेरी राय में प्रत्यय जोड़ने का सबसे अच्छा तरीका निम्नलिखित है।

df = df.add_suffix('_some_suffix')

जैसा कि यह एक फ़ंक्शन है जिसे DataFrame पर कॉल किया जाता है और DataFrame लौटाता है - आप कॉल की श्रृंखला में इसका उपयोग कर सकते हैं।


14
यदि आप नामों में उपसर्ग जोड़ना चाहते हैं तो आप add_prefix का उपयोग कर सकते हैं।
जॉर्ज

9
बहुत बुरा यह परिवर्तनशील नहीं हो सकता (यानी एक inplace=Trueपैरामीटर विकल्प नहीं है )। अन्यथा, एकदम सही।
जोजफ

मुझे लगता है कि यह कुछ परिस्थितियों में स्वीकृत जवाब से बेहतर है, क्योंकि इसका उपयोग एक बयान में संचालन की श्रृंखला में किया जा सकता है, बजाय इसके अपने बयान की आवश्यकता के।
कप्तान लेप्टन

@CaptainLepton जब यह उत्तर स्वीकार किए गए उत्तर से बेहतर नहीं होगा
baxx

1
यदि प्रत्यय स्थिर नहीं है। शीर्षक प्रत्ययों के बारे में बात करता है। पोस्ट एक एकल स्थिर प्रत्यय की गुंजाइश बताती है, लेकिन अगर हम सामान्य शब्दों में पोस्ट शीर्षक का जवाब दे रहे हैं, तो एक सूची समझ या अन्य चलने योग्य के माध्यम से कॉलम सेट करना अधिक लचीला है
कैप्टन लेप्टन

18

सुरुचिपूर्ण इन-प्लेस कॉनटेनटेशन

यदि आप dfइन-प्लेस को संशोधित करने का प्रयास कर रहे हैं , तो सबसे सस्ता (और सबसे सरल) विकल्प सीधे इन-प्लेस जोड़ है df.columns(यानी, उपयोग करके Index.__iadd__)।

df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
df

   A   B
0  9  12
1  4   7
2  2   5
3  1   4

df.columns += '_some_suffix'
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

एक उपसर्ग जोड़ने के लिए, आप इसी तरह उपयोग करेंगे

df.columns = 'some_prefix_' + df.columns
df

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

एक अन्य सस्ता विकल्प f-stringप्रारूपण के साथ सूची समझ का उपयोग कर रहा है (python3.6 + पर उपलब्ध)।

df.columns = [f'{c}_some_suffix' for c in df]
df

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

और उपसर्ग के लिए, इसी तरह,

df.columns = [f'some_prefix{c}' for c in df]

विधि जंजीर

यह भी संभव है कि विधि को जोड़ते समय * फिक्स * को जोड़ा जाए। एक प्रत्यय जोड़ने के लिए, का उपयोग करेंDataFrame.add_suffix

df.add_suffix('_some_suffix')

   A_some_suffix  B_some_suffix
0              9             12
1              4              7
2              2              5
3              1              4

यह डेटा की एक प्रति लौटाता है । IOW, dfसंशोधित नहीं है।

उपसर्गों को जोड़ने के साथ भी किया जाता है DataFrame.add_prefix

df.add_prefix('some_prefix_')

   some_prefix_A  some_prefix_B
0              9             12
1              4              7
2              2              5
3              1              4

जो संशोधित भी नहीं करता है df


की आलोचना add_*fix

ये अच्छी विधियाँ हैं यदि आप विधि जप करने की कोशिश कर रहे हैं:

df.some_method1().some_method2().add_*fix(...)

हालाँकि, add_prefix(और add_suffix) संपूर्ण डेटाफ़्रेम की एक प्रति बनाता है , बस हेडर को संशोधित करने के लिए। यदि आप मानते हैं कि यह बेकार है, लेकिन फिर भी आप चेन करना चाहते हैं, तो आप कॉल कर सकते हैं pipe:

def add_suffix(df):
    df.columns += '_some_suffix'
    return df

df.some_method1().some_method2().pipe(add_suffix)

यह सुरुचिपूर्ण है! क्या होगा यदि आप स्तंभों के सबसेट में उपसर्ग या प्रत्यय जोड़ना चाहते हैं जैसे कि कॉलम जिनके नाम में सभी कॉलम के बजाय एक सामान्य शब्द (जैसे newया old) होते हैं? धन्यवाद।
बोवेन लियू

1
@BowenLiu मैं इसके बजाय df.rename () के साथ जाने का सुझाव दूंगा ... उनके नए नामों के लिए एक शब्दकोश मानचित्रण पास करें। फिर अक्ष = 1 के साथ नाम बदलें। तुम भी सशर्त सूची समझ असाइनमेंट का उपयोग कर सकते हैं।
1895 पर cs95

केवल कॉलम नामों के रूप में नियमित डेटा प्रकारों के साथ काम करता है, यदि आपके कॉलम उदाहरण के लिए एक रेंजइंडेक्स जैसे नहीं हैं df = pd.DataFrame([[1,2,3]]*10)-> df.columns, तो आप उपयोग करेंगेdf.add_suffix('_x')
प्रश्न

आप df.columns = df.columns.astype(str) + '_x' मेरी पहली विधि दिखा सकते हैं।
cs95

4

मैंने इस समाधान को इस सूची में जोड़ने के ऊपर प्रस्तावित नहीं देखा है:

df.columns += '_x'

और आप उपसर्ग परिदृश्य के लिए आसानी से अनुकूलित कर सकते हैं।


प्रत्यय के लिए सबसे अच्छा समाधान, हालांकि यह उपसर्ग के लिए इस्तेमाल नहीं किया जा सकता है।
प्रश्न

कॉलम नामों में केवल नियमित डेटा प्रकारों के साथ काम करता है, न कि यदि आपके कॉलम एक रेंजइंडेक्स जैसे उदाहरण के लिए हैं df = pd.DataFrame([[1,2,3]]*10)-> df.columns, तो आप उपयोग करेंगेdf.add_suffix('_x')
प्रश्नावली

1

मुझे पता है कि आपके कॉलम के नामों में प्रत्यय (या उपसर्ग) जोड़ने के 4 तरीके हैं:

1- df.columns = [str(col) + '_some_suffix' for col in df.columns]

या

2- df.rename(columns= lambda col: col+'_some_suffix')

या

3- df.columns += '_some_suffix'बहुत सहजता।

या, सबसे अच्छा:

3- df.add_suffix('_some_suffix')


0

का उपयोग कर DataFrame.rename

का विरोध add_prefixऔरadd_suffix

पांडा के भविष्य के संस्करणों में add_prefixऔर पदावनतadd_suffix किया जाएगा । नई सलाह दी गई विधि का उपयोग करना है :DataFrame.rename

df = pd.DataFrame({'A': range(3), 'B': range(4, 7)})
print(df)
   A  B
0  0  4
1  1  5
2  2  6

स्ट्रिंग प्रारूपण के renameसाथ प्रयोग करना axis=1:

df.rename('col_{}'.format, axis=1)
# or df.rename(columns='col_{}'.format)

   col_A  col_B
0      0      4
1      1      5
2      2      6

आपके कॉलम नामों को वास्तव में अधिलेखित करने के लिए, हम हमारे द्वारा दिए गए मानों को असाइन कर सकते हैं df:

df = df.rename('col_{}'.format, axis=1)

या उपयोग inplace=True:

df.rename('col_{}'.format, axis=1, inplace=True)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.