Как получить первый столбец 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вместо. Смотрите комментарии и другие ответы на этот вопрос.

Herrfz
источник
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]]
HYRY
источник
как я могу получить такой последний столбец?
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
SamJ
источник
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

Черный список96
источник