การกำหนดดัชนีใหม่ในออบเจ็กต์ Pandas DataFrame


84

ฉันกำลังพยายามจัดทำดัชนีDataFrameวัตถุแพนด้าอีกครั้งเช่นนี้

From:
            a   b   c
        0   1   2   3
        1  10  11  12
        2  20  21  22

To :
           b   c
       1   2   3
      10  11  12
      20  21  22

ฉันกำลังพูดถึงเรื่องนี้ดังที่แสดงด้านล่างและได้รับคำตอบที่ผิด มีเบาะแสในการทำเช่นนี้หรือไม่?

>>> col = ['a','b','c']
>>> data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)
>>> data
    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22
>>> idx2 = data.a.values
>>> idx2
array([ 1, 10, 20], dtype=int64)
>>> data2 = DataFrame(data,index=idx2,columns=col[1:])
>>> data2
     b   c
1   11  12
10 NaN NaN
20 NaN NaN

มีความคิดว่าทำไมสิ่งนี้จึงเกิดขึ้น?


1
เนื่องจากคุณใช้ DF ตัวที่ 1 เพื่อสร้างอันที่สองสิ่งนี้จะได้รับเฉพาะแถวที่ idx2 ตัดกับ data.index เช่น แถวที่ 1
RuiDC

คำตอบ:


189

ทำไมคุณไม่ใช้set_indexวิธีการ?

In : col = ['a','b','c']

In : data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)

In : data
Out:
    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22

In : data2 = data.set_index('a')

In : data2
Out:
     b   c
a
1    2   3
10  11  12
20  21  22

17
ในการลบชื่อดัชนีดังตัวอย่างเดิม: data2.index.name = None
Daniele

5

หากคุณไม่ต้องการ 'a' ในดัชนี

ใน:

col = ['a','b','c']

data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)

data

ออก:

    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22

ใน:

data2 = data.set_index('a')

ออก:

     b   c
a
1    2   3
10  11  12
20  21  22

ใน:

data2.index.name = None

ออก:

     b   c
 1   2   3
10  11  12
20  21  22

1
การออกครั้งที่สองไม่ถูกต้อง ยังคงมีคอลัมน์ที่ไม่มีชื่อทางด้านซ้ายที่มี 0, 1, 2
Yster
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.