পান্ডাস সূচক কলামের শিরোনাম বা নাম


254

পাইথন পান্ডসে ইনডেক্স কলামের নামটি কীভাবে পাব? এখানে ডেটাফ্রেমের একটি উদাহরণ রয়েছে:

             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

কেউ কি করতে পারে জানেন?

উত্তর:


366

আপনি কেবল তার 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) এটি কাজ করে না। বা বরং - এটি কাজ করে, তবে ডেটাফ্রেম পরিবর্তিত হওয়ার সাথে সাথে এটি সূচকের নামটি মুছে ফেলে।
পাইটর মিগডাল

11
ডেটাফ্রেম তৈরির সময় সূচীর নাম উল্লেখ করা সম্ভব। যেমন pd.DataFrame(values,index={"INDEX_NAME":index_values})। আমি বুঝতে পারছি না কেন এটি অনুমোদিত বা বাস্তবায়ন হচ্ছে না?
denfromufa

1
একটি নাম যুক্ত করতে আপনি সরাসরি একটি সূচক দিয়ে তৈরি করতে পারেন
জেফ

@ জেফ, আপনার পর্যবেক্ষণের মতো দেখে মনে হচ্ছে যে সূচিটি প্রথমে তৈরি করা (এবং এটি ডেটাফ্রেমের সূচী এবং কলামগুলির জন্য ব্যবহার করুন) সঠিক পন্থা যদিও আমি সম্মতি দিয়েছি @denfromufaযে এটি পান্ডাস থেকে নির্মাণের জন্য প্যারামিটার হিসাবে একটি ডিক নিতে হবে।ডাটা ফ্রেম
ডিয়েগো আগুয়াডো

3
এটি যদি কোনও মাল্টিইন্ডেক্স হয় তবে তার 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)দেখুন পান্ডাস.পিডিটা.অর্গ
টমাস ফাউসঙ্কেঞ্জার

আমি ডেটাফ্রেম হিসাবে ব্যবহার করতে একটি অভিধান আমদানি করেছি তাই সূচী কলামটি স্বয়ংক্রিয়ভাবে কোনওটিতে সীমাবদ্ধ ছিল না যে সারিগুলি 1-10 বলে গণনা করা হচ্ছে। তবে আমি সূচি হিসাবে "নামগুলি" কলামটি বরাদ্দ করতে চাই। এবং সম্ভব হলে প্লট করার সময় এটি করুন। এটি করা কি সম্ভব এবং পরিকল্পনা করার সাথে সাথে ফ্লাইতে এটি করা কি সম্ভব?
টোকিওটু

28

df.index.name কৌতুক করা উচিত।

পাইথনের একটি dirফাংশন রয়েছে যা আপনাকে অবজেক্টের বৈশিষ্ট্যগুলি জিজ্ঞাসা করতে দেয়। dir(df.index)এখানে সহায়ক ছিল।



13

আপনি যদি একটি নতুন সারি তৈরি করতে না চান তবে খালি ঘরে রেখে দিতে পারেন তবে ব্যবহার করুন:

df.columns.name = 'foo'

অন্যথায় ব্যবহার করুন:

df.index.name = 'foo'

1
সবেমাত্র এটি কলামের নামের একটি নাম খুঁজে পেয়েছে। অবাক হওয়ার কিছু নেই যে df.index.name সেটিংস আপনাকে একটি নতুন স্তর দেয়। ধন্যবাদ!
চার্লস


1

মাল্টি-ইনডেক্সের সমাধানটি জিজরেলের সাইক্লোপেডিক উত্তরের মধ্যে রয়েছে তবে এটি খুঁজে পেতে আমার কিছুটা সময় লেগেছে তাই আমি একটি নতুন উত্তর পোস্ট করছি:

df.index.names মাল্টি-ইনডেক্সের নাম দেয় (ফ্রোজেনলিস্ট হিসাবে)।


1

কেবলমাত্র সূচিপত্র পাওয়ার df.index.namesজন্য পান্ডার সাম্প্রতিকতম সংস্করণ হিসাবে একক সূচক বা মাল্টিআইডেক্স উভয়ের পক্ষে কাজ করবে column

সূচকের নাম + কলামের নামের তালিকা পাওয়ার সর্বোত্তম উপায় সন্ধান করার সময় যে কেউ এটি পেয়েছেন, আমি এই উত্তরটি দরকারী বলে খুঁজে পেতে পারি:

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

এটি কোনও সূচি, একক কলাম সূচক বা মাল্টিআইডেক্সের জন্য কাজ করে না। এটি রিসেট_ইন্ডেক্স () এ কল করা এড়ায় যা এরকম সাধারণ অপারেশনের জন্য একটি অপ্রয়োজনীয় পারফরম্যান্স হিট করে। আমি আশ্চর্য হয়েছি যে এর জন্য কোনও বিল্ট ইন মেথড নেই (এটি আমি এসে পৌঁছেছি)। আমি অনুমান করি যে আমি এটির প্রায়শই প্রয়োজন বোধ করি কারণ আমি ডেটাবেসগুলি থেকে ডেটা শাট করছি যেখানে ডেটাফ্রেম সূচকটি প্রাথমিক / অনন্য কীতে ম্যাপ করে তবে এটি আমার কাছে কেবল অন্য কলাম।


1

সূচকের নাম নির্ধারণ করাও তৈরিতে সম্পন্ন হতে পারে:

pd.DataFrame(data={'age': [10,20,30], 'height': [100, 170, 175]}, index=pd.Series(['a', 'b', 'c'], name='Tag'))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.