ชื่อหรือชื่อคอลัมน์ดัชนีหมีแพนด้า


255

ฉันจะรับชื่อคอลัมน์ดัชนีใน python python ได้อย่างไร นี่คือตัวอย่างดาต้าเฟรม:

             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 ได้รับการแก้ไขมันจะลบชื่อดัชนี
Piotr Migdal

11
เป็นไปได้ที่จะระบุชื่อดัชนีในเวลาที่สร้าง DataFrame pd.DataFrame(values,index={"INDEX_NAME":index_values})เช่น ฉันไม่เข้าใจว่าทำไมไม่อนุญาตหรือดำเนินการนี้
denfromufa

1
คุณสามารถสร้างโดยตรงด้วยดัชนีเพื่อเพิ่มชื่อ
Jeff

@Jeff ดูเหมือนว่าการสังเกตของคุณที่สร้างดัชนีเป็นอันดับแรก (และใช้สำหรับดัชนีและคอลัมน์ของ dataframe) เป็นวิธีที่ถูกต้องแม้ว่าฉันจะเห็นพ้องต้องกัน@denfromufaว่าควรใช้ dict เป็นพารามิเตอร์ในการสร้างจาก pandas.DataFrame
Diego Aguado

3
ถ้าเป็น Multiindex ใช้แทนdf.index.names df.index.name
Jasha

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และตั้งค่าตามรายการหรือสิ่งอันดับ:

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

และโซลูชั่น @Jeff:

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
ฉันเชื่อว่านี่น่าจะเป็นคำตอบที่ยอมรับได้สำหรับหมีแพนด้ารุ่นปัจจุบัน
Thomas Fauskanger

2
นอกจากนี้ยังเป็นที่น่าสังเกตว่าฟิลแนะนำให้คนอื่น ๆdf.index.rename('foo', inplace=True)ดูที่pandas.pydata.org/pandas-docs/stable/generated/ …
Thomas

ฉันได้นำเข้าพจนานุกรมเพื่อใช้เป็น dataframe ดังนั้นคอลัมน์ดัชนีจะถูกตั้งค่าเป็น None โดยอัตโนมัติโดยมีแถวที่มีหมายเลข 1-10 แต่ฉันต้องการกำหนดคอลัมน์ "ชื่อ" เป็นดัชนี และถ้าเป็นไปได้ให้ทำระหว่างการวางแผน เป็นไปได้หรือไม่ที่จะทำสิ่งนี้และเป็นไปได้ที่จะทำสิ่งนี้ทันทีที่เราวางแผน?
TokyoToo

28

df.index.name ควรทำเคล็ดลับ

Python มีdirฟังก์ชั่นที่ช่วยให้คุณค้นหาคุณลักษณะของวัตถุ dir(df.index)มีประโยชน์ที่นี่



13

หากคุณไม่ต้องการสร้างแถวใหม่ แต่เพียงวางไว้ในเซลล์ว่างให้ใช้:

df.columns.name = 'foo'

มิฉะนั้นใช้:

df.index.name = 'foo'

1
เพิ่งพบว่าเป็นชื่อของคอลัมน์ ไม่น่าแปลกใจที่การตั้งค่า df.index.name ให้ระดับใหม่กับคุณ ขอบคุณ!
ชาร์ลส์


1

วิธีแก้ปัญหาสำหรับดัชนีหลายค่านั้นอยู่ในคำตอบของไซโคลเพดิคของ jezrael แต่ใช้เวลาสักพักกว่าจะหามันได้ดังนั้นฉันจึงโพสต์คำตอบใหม่:

df.index.names ให้ชื่อของดัชนีหลาย ๆ (เป็น Frozenlist)


1

ในการรับชื่อคอลัมน์ดัชนีdf.index.namesจะใช้ได้กับทั้งดัชนีเดี่ยวหรือ MultiIndex ซึ่งเป็นเวอร์ชันล่าสุดของนุ่น

ในฐานะคนที่พบสิ่งนี้ในขณะที่พยายามหาวิธีที่ดีที่สุดในการรับรายการชื่อดัชนี + ชื่อคอลัมน์ฉันจะพบคำตอบนี้มีประโยชน์:

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

สิ่งนี้ใช้ได้สำหรับไม่มีดัชนี, ดัชนีคอลัมน์เดี่ยวหรือ MultiIndex มันหลีกเลี่ยงการเรียกใช้ reset_index () ซึ่งมีประสิทธิภาพที่ไม่จำเป็นสำหรับการดำเนินการอย่างง่าย ฉันประหลาดใจที่ไม่มีวิธีการในตัวสำหรับสิ่งนี้ (ที่ฉันเคยเจอ) ฉันคิดว่าฉันจำเป็นต้องใช้สิ่งนี้บ่อยขึ้นเพราะฉันกำลังปิดระบบข้อมูลจากฐานข้อมูลที่ดัชนีของดัชนีข้อมูลแผนที่จับคู่กับคีย์หลัก / ที่ไม่ซ้ำกัน แต่จริงๆแล้วเป็นเพียงคอลัมน์อีกคอลัมน์หนึ่งสำหรับฉัน


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.