Làm cách nào để lấy cột đầu tiên của DataFrame dưới dạng Sê-ri?


142

Tôi đã thử:

x=pandas.DataFrame(...)
s = x.take([0], axis=1)

snhận được một DataFrame, không phải là Series.

Câu trả lời:


141
>>> 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'>
>>>

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

CẬP NHẬT

Nếu bạn đang đọc bài này sau tháng 6 năm 2017, ixđã bị phản đối trong gấu trúc 0.20.2, vì vậy đừng sử dụng nó. Sử dụng lochoặc ilocthay thế. Xem ý kiến ​​và câu trả lời khác cho câu hỏi này.


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

4
Sẽ có giá trị khi thêm thay thế .iloc (như được đề xuất bởi Jeff trên trang này), vì nó không mơ hồ khi có các cột có số cho tên.
sapo_cosmico

4
Câu trả lời đã được đưa ra vào năm 2013; theo như tôi nhớ, hồi .ilocđó chưa có. Năm 2016, câu trả lời chính xác là của Jeff (sau tất cả, anh ấy là pandasChúa, hãy nhớ đến bạn ;-)). Tôi không chắc chính sách của SO liên quan đến việc cập nhật câu trả lời do thay đổi API; Tôi thực sự ngạc nhiên về số phiếu bầu cho câu trả lời này, không nghĩ rằng nó hữu ích với mọi người ...
herrfz

2
Một lưu ý khác: khôngix được dùng trong phiên bản 0.20.
ayhan

5
ixkhông nên được sử dụng nữa, sử dụng ilocthay thế : s = df.ix[:,0]. Xem bài đăng này để so sánh ilocix.
Normanius

117

Từ v0.11 +, ... sử dụng df.iloc.

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

3
Đây là phiên bản tương thích nhất với các bản phát hành mới và cả với bản cũ. Và có lẽ là hiệu quả nhất kể từ khi nhóm phát triển chính thức quảng bá phương pháp này.
gabious

116

Bạn có thể lấy cột đầu tiên dưới dạng Sê-ri bằng mã sau:

x[x.columns[0]]

Làm thế nào tôi có thể nhận được cột cuối cùng như vậy?
Polly

Những cái khác cũng hoạt động tốt, nhưng cái này có vẻ trực quan hơn.
elPastor

6
Điều này là không tốt nếu bạn có nhiều cột có cùng tên. Cho dù tên cột có phải là duy nhất hay không là một cuộc thảo luận riêng biệt.
Vishal

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

13

Đây không phải là cách đơn giản nhất sao?

Theo tên cột:

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
Trong trường hợp cụ thể này, bạn biết tên của cột đầu tiên ("x"), nhưng câu hỏi có nghĩa là gì: "Làm thế nào tôi có thể truy cập vào cột đầu tiên, TÌM HIỂU tên của nó". Ngoài ra, việc truy cập các cột như thế này ( df.x) không chung chung - nếu tên cột chứa khoảng trắng thì sao? Nếu tên của cột trùng với DataFrametên thuộc tính -s thì sao? Việc truy cập các cột bằng cách sử dụng __getitem__(ví dụ như vậy df["x"]:).
ponadto

2
Cũng không hoạt động nếu tiêu đề của cột có khoảng trắng trong đó.
Jean-François Corbett

3

Điều này hoạt động rất tốt khi bạn muốn tải một loạt từ tệp 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]]

nơi iđược vị trí / số cột (bắt đầu từ 0 ).

Vì vậy, i = 0là cho cột đầu tiên.

Bạn cũng có thể lấy cột cuối cùng bằng cách sử dụng i = -1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.