Як отримати перший стовпець панди DataFrame як серію?


Відповіді:


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

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

ОНОВЛЕННЯ

Якщо ви читаєте це після червня 2017 року, ixзастаріле в пандах 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.
айхан

5
ixне повинні використовуватися більше, використовуйте ilocзамість цього: s = df.ix[:,0]. Дивіться цю публікацію для порівняння ilocта ix.
Норманій

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
Це найбільш сумісна версія з новими випусками, а також зі старими. І, мабуть, найбільш ефективно, оскільки команда розробників офіційно просуває цей підхід.
габоровий

116

Ви можете отримати перший стовпець у вигляді серії за наступним кодом:

x[x.columns[0]]

як я можу отримати останній стовпчик таким?
Поллі

Інші також добре працюють, але це здається більш інтуїтивним.
elPastor

6
Це не добре, якщо у вас є кілька стовпців з однаковою назвою. Чи мають назви стовпців бути унікальними чи ні - це окрема дискусія.
Вішал

@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
У цьому конкретному випадку ви знаєте назву першого стовпця ("х"), але що мав на увазі питання: "Як я можу отримати доступ до першого стовпця, ВІДПОВІДНО його ім'я". Також доступ до таких стовпців ( df.x) не є загальним - що робити, якщо назва стовпця містить пробіли? Що робити, якщо назва стовпця збігається з DataFrameатрибутом -s? Більш загальним є доступ до стовпців за допомогою __getitem__(тобто так df["x"]:).
понадто

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

0
df[df.columns[i]]

де iпозиція / номер стовпця (починаючи з 0 ).

Отже, i = 0для першої колонки.

Ви також можете отримати останній стовпець, використовуючи i = -1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.