पंडों में एक विशिष्ट स्तंभ नाम बदलना DataFrame


195

मैं एक निर्दिष्ट कॉलम नाम को बदलने के लिए एक सुरुचिपूर्ण तरीके की तलाश कर रहा था DataFrame

डेटा चलाएं ...

import pandas as pd
d = {
         'one': [1, 2, 3, 4, 5],
         'two': [9, 8, 7, 6, 5],
         'three': ['a', 'b', 'c', 'd', 'e']
    }
df = pd.DataFrame(d)

सबसे सुरुचिपूर्ण समाधान जो मैंने अब तक पाया है ...

names = df.columns.tolist()
names[names.index('two')] = 'new_name'
df.columns = names

मैं एक साधारण एक लाइनर के लिए उम्मीद कर रहा था ... यह प्रयास विफल रहा ...

df.columns[df.columns.tolist().index('one')] = 'another_name'

किसी भी संकेत कृतज्ञता प्राप्त की।

जवाबों:


355

एक लाइनर मौजूद है:

In [27]: df=df.rename(columns = {'two':'new_name'})

In [28]: df
Out[28]: 
  one three  new_name
0    1     a         9
1    2     b         8
2    3     c         7
3    4     d         6
4    5     e         5

निम्नलिखित renameविधि के लिए docstring है ।

परिभाषा: df.rename (स्वयं, अनुक्रमणिका = कोई नहीं, कॉलम = कोई नहीं, प्रतिलिपि = सत्य, inplace = गलत)
Docstring:
अलर्ट इंडेक्स और / या इनपुट फ़ंक्शन का उपयोग करके कॉलम या
कार्य करता है। समारोह / तानाशाही मूल्य अद्वितीय (1-से -1) होना चाहिए। लेबल नहीं
एक तानाशाह / श्रृंखला में निहित के रूप में छोड़ दिया जाएगा।

पैरामीटर
----------
सूचकांक: तानाशाह की तरह या समारोह, वैकल्पिक
    सूचकांक मूल्यों पर लागू करने के लिए परिवर्तन
कॉलम: तानाशाह की तरह या समारोह, वैकल्पिक
    कॉलम मानों पर लागू करने के लिए परिवर्तन
कॉपी: बूलियन, डिफ़ॉल्ट सही
    इसके अलावा अंतर्निहित डेटा की प्रतिलिपि बनाएँ
निष्क्रिय: बूलियन, डिफ़ॉल्ट गलत
    एक नया DataFrame वापस करना है या नहीं। यदि सही है तो कॉपी का मूल्य है
    अवहेलना करना।

यह सभी देखें
--------
Series.rename

रिटर्न
-------
नाम: DataFrame (नई वस्तु)

यह मेरे लिए काम नहीं करता है जब तक कि मैं inel = true का उपयोग नहीं करता हूं, जैसा कि @ जियोंग-यूं ली उत्तर में दिखाया गया है।
JStrahl

108

चूंकि inplaceतर्क उपलब्ध है, आपको मूल डेटा फ़्रेम को स्वयं कॉपी और असाइन करने की आवश्यकता नहीं है, लेकिन निम्नानुसार करें:

df.rename(columns={'two':'new_name'}, inplace=True)

39

व्हाट अबाउट?

df.columns.values[2] = "new_name"

11
वास्तव में वह काम नहीं करता है अगर बाद में आप अन्य नामों पर कॉलम नाम का उपयोग करते हैं जैसे कि df ['new_name']
मास्टर दही

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

1
@MasterYogurt आपकी टिप्पणी सही नहीं है। df['new_name']ऊपर उल्लिखित के रूप में चर बदलने के बाद (और अन्य पांडा चीजें) प्रदर्शन करना संभव है । मूल रूप से पोस्ट किए जाने पर आपकी टिप्पणी मान्य हो सकती है।
जैकब एच।

1
कहा जा रहा है, renameतरीकों का उपयोग करना बेहतर समाधान है।
याकूब एच।

6

पंडों 0.21 में अब एक अक्ष पैरामीटर है

बाकी पंडों एपीआई के अधिकांश से मेल करने के लिए नाम बदलने की विधि एक अक्ष पैरामीटर प्राप्त की है।

तो, इसके अतिरिक्त:

df.rename(columns = {'two':'new_name'})

तुम कर सकते हो:

df.rename({'two':'new_name'}, axis=1)

या

df.rename({'two':'new_name'}, axis='columns')

df.rename ({'two': 'new_name'}, axis = 'कॉलम') Th टाइप टाइप: 'दोनों' एक्सिस 'और किसी भी' इंडेक्स 'या' कॉलम 'दोनों को निर्दिष्ट नहीं कर सकता।
हियर

@ हेरेरी सुनिश्चित करें कि आप पांडा संस्करण 0.21 पर हैं। क्या pd.__version__अपना वर्शन देखने का
टेड Petrou

5

यदि आप जानते हैं कि कौन सा कॉलम # है (यह पहला / दूसरा / nth) है, तो एक समान प्रश्न पर पोस्ट किया गया यह समाधान इस बात पर ध्यान दिए बिना काम करता है कि यह नाम है या अनाम, और एक पंक्ति में: https://stackoverflow.com/a/26336314/ 4355695

df.rename(columns = {list(df)[1]:'new_name'}, inplace=True)
# 1 is for second column (0,1,2..)

3

स्तंभों का नाम बदलने के लिए यहां सरल है जो दोनों Default(0,1,2,etc;)और मौजूदा स्तंभों के लिए काम करेगा, लेकिन बड़े डेटा सेट (कई कॉलम वाले) के लिए ज्यादा उपयोगी नहीं है।

बड़े डेटा सेट के लिए हम उन कॉलम को स्लाइस कर सकते हैं जिनकी हमें आवश्यकता है और नीचे दिए गए कोड को लागू करें:

df.columns = ['new_name','new_name1','old_name']

2

निम्नलिखित लघु कोड मदद कर सकते हैं:

df3 = df3.rename(columns={c: c.replace(' ', '') for c in df3.columns})

कॉलम से रिक्त स्थान निकालें।


मुझे AttributeError: 'int' object has no attribute 'replace'लगता है कि आप उस पर विस्तार कर सकते हैं रखा ।
निर्मल

2

पांडा संस्करण 0.23.4

df.rename(index=str,columns={'old_name':'new_name'},inplace=True)

रिकार्ड के लिए:

इंडेक्स छोड़ते हुए = str त्रुटि देगा जिससे अनपेक्षित तर्क 'कॉलम' होगा


1

एक अन्य विकल्प केवल कॉलम को कॉपी और ड्रॉप करना होगा:

df = pd.DataFrame(d)
df['new_name'] = df['two']
df = df.drop('two', axis=1)
df.head()

उसके बाद आपको परिणाम मिलता है:

    one three   new_name
0   1   a       9
1   2   b       8
2   3   c       7
3   4   d       6
4   5   e       5

2
कॉलम इंडेक्स का क्रम महत्वपूर्ण होने की स्थिति में यह विधि मदद नहीं करेगी। नए कॉलम को अंत में बनाया जाएगा।
लोकी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.