पंडों सूचकांक स्तंभ शीर्षक या नाम


255

मुझे पायथन पांडा में इंडेक्स कॉलम नाम कैसे मिलता है? यहाँ एक उदाहरण डेटाफ़्रेम है:

             Column 1
Index Title          
Apples              1
Oranges             2
Puppies             3
Ducks               4  

मैं जो करने की कोशिश कर रहा हूं वह डेटाफ्रेम इंडेक्स शीर्षक प्राप्त / सेट है। यहाँ मैं कोशिश की है:

import pandas as pd
data = {'Column 1'     : [1., 2., 3., 4.],
        'Index Title'  : ["Apples", "Oranges", "Puppies", "Ducks"]}
df = pd.DataFrame(data)
df.index = df["Index Title"]
del df["Index Title"]
print df

क्या कोई जानता है कि इसे कैसे करना है?

जवाबों:


367

आप बस अपनी nameसंपत्ति के माध्यम से सूचकांक प्राप्त / सेट कर सकते हैं

In [7]: df.index.name
Out[7]: 'Index Title'

In [8]: df.index.name = 'foo'

In [9]: df.index.name
Out[9]: 'foo'

In [10]: df
Out[10]: 
         Column 1
foo              
Apples          1
Oranges         2
Puppies         3
Ducks           4

10
अब तक (0.16) यह काम नहीं करता है। या बल्कि - यह काम करता है, लेकिन जैसे ही DataFrame संशोधित होता है, यह सूचकांक नाम मिटा देता है।
पियोट्र मिग्डल

11
DataFrame निर्माण समय पर इंडेक्स नाम निर्दिष्ट करना संभव होना चाहिए। उदा pd.DataFrame(values,index={"INDEX_NAME":index_values})। मुझे समझ नहीं आ रहा है कि इसकी अनुमति क्यों नहीं है या इसे लागू नहीं किया गया है?
डेन्फ्रोमुफा

1
आप सीधे एक इंडेक्स के साथ एक नाम जोड़ने के लिए निर्माण कर सकते हैं
जेफ

@Jeff, आपके अवलोकन की तरह दिखता है जो पहले इंडेक्स का निर्माण करता है (और डेटाफ़्रेम के इंडेक्स और कॉलम के लिए इसका उपयोग करता है) सही दृष्टिकोण है, हालांकि मैं इसके साथ सहमत हूं @denfromufa है कि यह पैरामीटर के रूप में एक dict लेना चाहिए pandas.DataFrame से निर्माण करने के लिए
डिएगो Aguado

3
यदि यह एक Multindex है, तो df.index.namesइसके बजाय का उपयोग करें df.index.name
जशा

75

rename_axisसेट को हटाने के लिए आप इसका उपयोग कर सकते हैं None:

d = {'Index Title': ['Apples', 'Oranges', 'Puppies', 'Ducks'],'Column 1': [1.0, 2.0, 3.0, 4.0]}
df = pd.DataFrame(d).set_index('Index Title')
print (df)
             Column 1
Index Title          
Apples            1.0
Oranges           2.0
Puppies           3.0
Ducks             4.0

print (df.index.name)
Index Title

print (df.columns.name)
None

नई कार्यक्षमता विधि श्रृंखलाओं में अच्छी तरह से काम करती है।

df = df.rename_axis('foo')
print (df)
         Column 1
foo              
Apples        1.0
Oranges       2.0
Puppies       3.0
Ducks         4.0

आप पैरामीटर के साथ कॉलम नाम भी बदल सकते हैं axis:

d = {'Index Title': ['Apples', 'Oranges', 'Puppies', 'Ducks'],'Column 1': [1.0, 2.0, 3.0, 4.0]}
df = pd.DataFrame(d).set_index('Index Title').rename_axis('Col Name', axis=1)
print (df)
Col Name     Column 1
Index Title          
Apples            1.0
Oranges           2.0
Puppies           3.0
Ducks             4.0

print (df.index.name)
Index Title

print (df.columns.name)
Col Name
print df.rename_axis('foo').rename_axis("bar", axis="columns")
bar      Column 1
foo              
Apples        1.0
Oranges       2.0
Puppies       3.0
Ducks         4.0

print df.rename_axis('foo').rename_axis("bar", axis=1)
bar      Column 1
foo              
Apples        1.0
Oranges       2.0
Puppies       3.0
Ducks         4.0

संस्करण से pandas 0.24.0+पैरामीटर का उपयोग संभव है indexऔर columns:

df = df.rename_axis(index='foo', columns="bar")
print (df)
bar      Column 1
foo              
Apples        1.0
Oranges       2.0
Puppies       3.0
Ducks         4.0

सूचकांक और स्तंभ नामों को हटाने का मतलब है None:

df = df.rename_axis(index=None, columns=None)
print (df)
         Column 1
Apples        1.0
Oranges       2.0
Puppies       3.0
Ducks         4.0

यदि MultiIndexकेवल सूचकांक में:

mux = pd.MultiIndex.from_arrays([['Apples', 'Oranges', 'Puppies', 'Ducks'],
                                  list('abcd')], 
                                  names=['index name 1','index name 1'])


df = pd.DataFrame(np.random.randint(10, size=(4,6)), 
                  index=mux, 
                  columns=list('ABCDEF')).rename_axis('col name', axis=1)
print (df)
col name                   A  B  C  D  E  F
index name 1 index name 1                  
Apples       a             5  4  0  5  2  2
Oranges      b             5  8  2  5  9  9
Puppies      c             7  6  0  7  8  3
Ducks        d             6  5  0  1  6  0

print (df.index.name)
None

print (df.columns.name)
col name

print (df.index.names)
['index name 1', 'index name 1']

print (df.columns.names)
['col name']

df1 = df.rename_axis(('foo','bar'))
print (df1)
col name     A  B  C  D  E  F
foo     bar                  
Apples  a    5  4  0  5  2  2
Oranges b    5  8  2  5  9  9
Puppies c    7  6  0  7  8  3
Ducks   d    6  5  0  1  6  0

df2 = df.rename_axis('baz', axis=1)
print (df2)
baz                        A  B  C  D  E  F
index name 1 index name 1                  
Apples       a             5  4  0  5  2  2
Oranges      b             5  8  2  5  9  9
Puppies      c             7  6  0  7  8  3
Ducks        d             6  5  0  1  6  0

df2 = df.rename_axis(index=('foo','bar'), columns='baz')
print (df2)
baz          A  B  C  D  E  F
foo     bar                  
Apples  a    5  4  0  5  2  2
Oranges b    5  8  2  5  9  9
Puppies c    7  6  0  7  8  3
Ducks   d    6  5  0  1  6  0

सूचकांक और स्तंभ नामों को हटाने का मतलब है None:

df2 = df.rename_axis(index=(None,None), columns=None)
print (df2)

           A  B  C  D  E  F
Apples  a  6  9  9  5  4  6
Oranges b  2  6  7  4  3  5
Puppies c  6  3  6  3  5  1
Ducks   d  4  9  1  3  0  5

के लिये MultiIndex सूचकांक और स्तंभों में साथ काम कर रहे आवश्यक है .namesबजाय .nameऔर सूची या tuples द्वारा सेट:

mux1 = pd.MultiIndex.from_arrays([['Apples', 'Oranges', 'Puppies', 'Ducks'],
                                  list('abcd')], 
                                  names=['index name 1','index name 1'])


mux2 = pd.MultiIndex.from_product([list('ABC'),
                                  list('XY')], 
                                  names=['col name 1','col name 2'])

df = pd.DataFrame(np.random.randint(10, size=(4,6)), index=mux1, columns=mux2)
print (df)
col name 1                 A     B     C   
col name 2                 X  Y  X  Y  X  Y
index name 1 index name 1                  
Apples       a             2  9  4  7  0  3
Oranges      b             9  0  6  0  9  4
Puppies      c             2  4  6  1  4  4
Ducks        d             6  6  7  1  2  8

चेक / सेट मान के लिए बहुवचन आवश्यक है:

print (df.index.name)
None

print (df.columns.name)
None

print (df.index.names)
['index name 1', 'index name 1']

print (df.columns.names)
['col name 1', 'col name 2']

df1 = df.rename_axis(('foo','bar'))
print (df1)
col name 1   A     B     C   
col name 2   X  Y  X  Y  X  Y
foo     bar                  
Apples  a    2  9  4  7  0  3
Oranges b    9  0  6  0  9  4
Puppies c    2  4  6  1  4  4
Ducks   d    6  6  7  1  2  8

df2 = df.rename_axis(('baz','bak'), axis=1)
print (df2)
baz                        A     B     C   
bak                        X  Y  X  Y  X  Y
index name 1 index name 1                  
Apples       a             2  9  4  7  0  3
Oranges      b             9  0  6  0  9  4
Puppies      c             2  4  6  1  4  4
Ducks        d             6  6  7  1  2  8

df2 = df.rename_axis(index=('foo','bar'), columns=('baz','bak'))
print (df2)
baz          A     B     C   
bak          X  Y  X  Y  X  Y
foo     bar                  
Apples  a    2  9  4  7  0  3
Oranges b    9  0  6  0  9  4
Puppies c    2  4  6  1  4  4
Ducks   d    6  6  7  1  2  8

सूचकांक और स्तंभ नामों को हटाने का मतलब है None:

df2 = df.rename_axis(index=(None,None), columns=(None,None))
print (df2)

           A     B     C   
           X  Y  X  Y  X  Y
Apples  a  2  0  2  5  2  0
Oranges b  1  7  5  5  4  8
Puppies c  2  4  6  3  6  5
Ducks   d  9  6  3  9  7  0

और @ जेफ़ समाधान:

df.index.names = ['foo','bar']
df.columns.names = ['baz','bak']
print (df)

baz          A     B     C   
bak          X  Y  X  Y  X  Y
foo     bar                  
Apples  a    3  4  7  3  3  3
Oranges b    1  2  5  8  1  0
Puppies c    9  6  3  9  6  3
Ducks   d    3  2  1  0  1  0

7
मेरा मानना ​​है कि यह पांडा के वर्तमान संस्करणों के लिए स्वीकृत उत्तर होना चाहिए
थॉमस फाउन्सेन्कर

2
इसके अलावा ध्यान देने योग्य है, जैसा कि एक अन्य दर्शन में सुझाव है df.index.rename('foo', inplace=True)कि pandas.pydata.org/pandas-docs/stable/generated/…
थॉमस फाउन्सेन्कर

मैंने एक डिक्शनरी को एक डेटाफ्रेम के रूप में उपयोग करने के लिए आयात किया है इसलिए इंडेक्स कॉलम को 1-10 की संख्या वाली पंक्तियों के साथ स्वचालित रूप से सेट नहीं किया गया था। लेकिन मैं सूचकांक के रूप में "नाम" कॉलम निर्दिष्ट करना चाहूंगा। और यदि संभव हो तो प्लॉटिंग के दौरान ऐसा करें। क्या ऐसा करना संभव है और क्या यह संभव है कि हम जिस तरह से साजिश करते हैं, वैसा ही हो?
टोक्योट्यू

28

df.index.name चाल चलनी चाहिए।

पायथन में एक dirफ़ंक्शन है जो आपको ऑब्जेक्ट विशेषताओं को क्वेरी करने देता है। dir(df.index)यहाँ मददगार था।


17

df.index.rename('foo', inplace=True)इंडेक्स नाम सेट करने के लिए उपयोग करें ।

लगता है कि यह एपि 0.13 के बाद से उपलब्ध है ।


1
वाह ... एक सुंदर समाधान!
अल्फोंसो

13

यदि आप एक नई पंक्ति नहीं बनाना चाहते हैं, लेकिन बस इसे खाली सेल में रखें तो उपयोग करें:

df.columns.name = 'foo'

अन्यथा उपयोग करें:

df.index.name = 'foo'

1
बस यह पाया कि यह स्तंभों के नामों का एक नाम है। कोई आश्चर्य नहीं कि df.index.name सेट करना आपको एक नया स्तर देता है। धन्यवाद!
चार्ल्स


1

मल्टी-इंडेक्स का समाधान जेज़रेल के साइक्लोपेडिक उत्तर के अंदर है, लेकिन मुझे इसे खोजने में थोड़ा समय लगा इसलिए मैं एक नया उत्तर पोस्ट कर रहा हूं:

df.index.names मल्टी-इंडेक्स के नाम देता है (फ्रोजनलिस्ट के रूप में)।


1

केवल इंडेक्स कॉलम नाम प्राप्त करने के लिए df.index.names करने के लिए पंडों के सबसे हाल के संस्करण के रूप में एकल इंडेक्स या मल्टीआईंडेक्स दोनों के लिए काम करेंगे।

जैसा कि किसी ने इसे पाया, जबकि सूचकांक नामों + स्तंभ नामों की सूची प्राप्त करने का सबसे अच्छा तरीका खोजने की कोशिश कर रहा था, मुझे यह उत्तर उपयोगी लगा होगा:

names = list(filter(None, df.index.names + df.columns.values.tolist()))

यह बिना किसी इंडेक्स, सिंगल कॉलम इंडेक्स या मल्टीएंडेक्स के काम करता है। यह reset_index () कॉल करने से बचता है जिसमें इस तरह के एक सरल ऑपरेशन के लिए अनावश्यक प्रदर्शन होता है। मुझे आश्चर्य है कि इसके लिए कोई बिल्ट इन मेथड नहीं है (कि मैं भर आया हूँ)। मुझे लगता है कि मुझे इसकी अधिक आवश्यकता है, क्योंकि मैं डेटाबेस से डेटा को बंद कर रहा हूं, जहां डेटाफ्रेम इंडेक्स मैप्स को एक प्राथमिक / अद्वितीय कुंजी के रूप में दिखाता है, लेकिन वास्तव में मेरे लिए एक और कॉलम है।


1

इंडेक्स नाम सेट करना भी निर्माण पर पूरा किया जा सकता है:

pd.DataFrame(data={'age': [10,20,30], 'height': [100, 170, 175]}, index=pd.Series(['a', 'b', 'c'], name='Tag'))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.