วิธีรับคอลัมน์แรกของ DataFrame แพนด้าเป็น Series


คำตอบ:


142
>>> import pandas as pd
>>> df = pd.DataFrame({'x' : [1, 2, 3, 4], 'y' : [4, 5, 6, 7]})
>>> df
   x  y
0  1  4
1  2  5
2  3  6
3  4  7
>>> s = df.ix[:,0]
>>> type(s)
<class 'pandas.core.series.Series'>
>>>

================================================== =========================

UPDATE

หากคุณกำลังอ่านสิ่งนี้หลังจากเดือนมิถุนายน 2017 ixมีการคัดค้านในแพนด้า 0.20.2 ดังนั้นอย่าใช้มัน ใช้locหรือilocแทน ดูความคิดเห็นและคำตอบอื่น ๆ สำหรับคำถามนี้


4
df.set_index('x').y
herrfz

4
น่าจะเป็นการเพิ่มทางเลือก. iloc (ตามที่เจฟฟ์เสนอเพิ่มเติมในหน้านี้) เนื่องจากไม่มีความคลุมเครือต่อหน้าคอลัมน์ที่มีตัวเลขสำหรับชื่อ
sapo_cosmico

4
คำตอบที่ได้รับในปี 2013; เท่าที่ฉันจำ.ilocได้ยังไม่มีในตอนนั้น ในปี 2559 คำตอบที่ถูกต้องคือเจฟฟ์ (หลังจากเขาคือpandasพระเจ้าโปรดทราบ ;-)) ฉันไม่แน่ใจว่านโยบายของ SO เกี่ยวกับการอัปเดตคำตอบเนื่องจากการเปลี่ยนแปลง API เป็นอย่างไร ฉันประหลาดใจตรงไปตรงมาโดยจำนวนของคะแนนสำหรับคำตอบนี้ไม่ได้คิดว่ามันเป็นที่ที่มีประโยชน์กับคนที่ ...
herrfz

2
ทราบอีก: ixถูกเลิกใช้ในรุ่น 0.20
ayhan

5
ixไม่ควรใช้อีกต่อไปให้ใช้ilocแทน: s = df.ix[:,0]. ดูโพสต์นี้สำหรับการเปรียบเทียบของและiloc ix
normanius

117

จาก v0.11 + ... df.ilocการใช้งาน

In [7]: df.iloc[:,0]
Out[7]: 
0    1
1    2
2    3
3    4
Name: x, dtype: int64

3
นี้เป็นรุ่นที่เข้ากันได้มากที่สุดกับรุ่นใหม่และรุ่นเก่า และอาจมีประสิทธิภาพมากที่สุดเนื่องจากทีม dev กำลังโปรโมตวิธีการนี้
gaborous

116

คุณสามารถรับคอลัมน์แรกเป็นซีรี่ส์ได้โดยใช้รหัสต่อไปนี้:

x[x.columns[0]]

ฉันจะได้คอลัมน์สุดท้ายแบบนั้นได้อย่างไร
พอลลี่

คนอื่นทำงานได้ดีเช่นกัน แต่อันนี้ดูเหมือนจะเป็นธรรมชาติมากกว่า
elPastor

6
สิ่งนี้ไม่ดีถ้าคุณมีหลายคอลัมน์ที่มีชื่อเดียวกัน ว่าชื่อคอลัมน์ควรไม่ซ้ำกันหรือไม่เป็นการอภิปรายแยกต่างหาก
Vishal

@Pollyx[x.columns[x.columns.size-1]]
fujianjin6471

13

นี่ไม่ใช่วิธีที่ง่ายที่สุดใช่ไหม

ตามชื่อคอลัมน์:

In [20]: df = pd.DataFrame({'x' : [1, 2, 3, 4], 'y' : [4, 5, 6, 7]})
In [21]: df
Out[21]:
    x   y
0   1   4
1   2   5
2   3   6
3   4   7

In [23]: df.x
Out[23]:
0    1
1    2
2    3
3    4
Name: x, dtype: int64

In [24]: type(df.x)
Out[24]:
pandas.core.series.Series

9
ในกรณีพิเศษนี้คุณรู้ชื่อของคอลัมน์แรก ("x") แต่สิ่งที่คำถามหมายถึงคือ: "ฉันจะเข้าถึงคอลัมน์แรกได้อย่างไรโดยไม่คำนึงถึงชื่อ" นอกจากนี้การเข้าถึงคอลัมน์เช่นนี้ ( df.x) ไม่ใช่ชื่อทั่วไป - จะเกิดอะไรขึ้นหากชื่อคอลัมน์มีช่องว่าง เกิดอะไรขึ้นถ้าชื่อของคอลัมน์ตรงกับDataFrameชื่อแอตทริบิวต์ -s? มันทั่วไปมากขึ้นในการเข้าถึงโดยใช้คอลัมน์__getitem__(เช่นชอบดังนั้น: df["x"])
ponadto

2
ยังใช้งานไม่ได้หากส่วนหัวของคอลัมน์มีเช่นช่องว่างในนั้น
Jean-François Corbett

3

วิธีนี้ใช้งานได้ดีเมื่อคุณต้องการโหลดซีรีส์จากไฟล์ csv

x = pd.read_csv('x.csv', index_col=False, names=['x'],header=None).iloc[:,0]
print(type(x))
print(x.head(10))


<class 'pandas.core.series.Series'>
0    110.96
1    119.40
2    135.89
3    152.32
4    192.91
5    177.20
6    181.16
7    177.30
8    200.13
9    235.41
Name: x, dtype: float64

0
df[df.columns[i]]

โดยที่iเป็นตำแหน่ง / หมายเลขของคอลัมน์ (เริ่มต้นจาก0 )

ดังนั้นi = 0สำหรับคอลัมน์แรก

คุณยังสามารถใช้คอลัมน์สุดท้ายได้เช่นกัน i = -1

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