Как получить первый столбец DataFrame pandas в виде серии?


Ответы:


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

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

ОБНОВИТЬ

Если вы читаете это после июня 2017 года, ixон устарел в pandas 0.20.2, поэтому не используйте его. Используйте locили ilocвместо. Смотрите комментарии и другие ответы на этот вопрос.


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

4
Стоит добавить альтернативу .iloc (как предложено Джеффом ниже на этой странице), поскольку она не является двусмысленной при наличии столбцов с номерами для имен.
sapo_cosmico

4
Ответ был дан в 2013 году; насколько я помню, .ilocтогда еще не было. В 2016 году правильный ответ - Джефф (в конце концов, он pandasБог, заметьте ;-)). Я не уверен, какова политика SO относительно обновления ответов в связи с изменением API; Я искренне удивлен количеством голосов за этот ответ, не думаю, что он был так полезен для людей ...
herrfz

2
Еще одно замечание: ixбыло устаревшим в версии 0.20.
ayhan

7
ixне должны использоваться больше, используйте ilocвместо этого: s = df.ix[:,0]. См. Этот пост для сравнения ilocи ix.
Normanius 02

124

Начиная с v0.11 +, ... пользуйтесь df.iloc.

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

3
Это наиболее совместимая версия с новыми выпусками, а также со старыми. И, вероятно, самый эффективный, поскольку команда разработчиков официально продвигает этот подход.
gaborous

118

Вы можете получить первый столбец как серию, используя следующий код:

x[x.columns[0]]

как я могу получить такой последний столбец?
Polly

Остальные тоже работают нормально, но этот кажется более интуитивным.
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»), но вопрос имел в виду: «Как я могу получить доступ к первому столбцу, НЕЗАВИСИМО от его имени». Кроме того, доступ к столбцам, подобным this ( df.x), не является универсальным - что, если имя столбца содержит пробелы? Что, если имя столбца совпадает с DataFrameименем атрибута -s? Более общий доступ к столбцам осуществляется с помощью __getitem__(например, так:) df["x"].
ponadto

2
Также не работает, если в заголовке столбца есть, например, пробелы.
Жан-Франсуа Корбетт

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

1
df[df.columns[i]]

где i- позиция / номер столбца (начиная с 0 ).

Итак, i = 0для первого столбца.

Вы также можете получить последний столбец, используя i = -1

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.