Як вибрати останній стовпець фрейму даних


82

Я кілька шукав відповіді на це питання, але все, що я можу зрозуміти, це наступне:

df[df.columns[len(df.columns)-1]]

що мені здається дивовижним і непітонічним (і повільним?).

Який найпростіший спосіб вибрати дані для останнього стовпця у фреймі даних pandas без зазначення назви стовпця?

Відповіді:


144

Використовуйте iloc і виділіть усі рядки ( :) до останнього стовпця ( -1):

df.iloc[:,-1:]

6
Я спробував це зробити, і з'явилася помилка із
запитом

34

Дещо схоже на вашу початкову спробу, але більш пітонічну, полягає у використанні стандартної домовленості негативного індексування Python для відліку назад від кінця:

df[df.columns[-1]]

23

Це кілька речей, які допоможуть вам зрозуміти все ... за допомогою iloc

У iloc, [початковий рядок: кінцевий рядок, початковий стовпець: кінцевий стовпець]

випадок 1: якщо ви хочете лише останній стовпець --- df.iloc[:,-1] & df.iloc[:,-1:] це означає, що ви хочете лише останній стовпець ...

випадок 2: якщо ви хочете всі стовпці та всі рядки, крім останнього стовпця --- df.iloc[:,:-1] це означає, що ви хочете всі стовпці та всі рядки, крім останнього стовпця ...

випадок 3: якщо ви хочете лише останній рядок --- df.iloc[-1:,:] & df.iloc[-1,:] це означає, що ви хочете лише останній рядок ...

випадок 4: якщо ви хочете всі стовпці та всі рядки, крім останнього рядка --- df.iloc[:-1,:] це означає, що ви хочете всі стовпці та всі рядки, крім останнього стовпця ...

випадок 5: якщо ви хочете всі стовпці та всі рядки, крім останнього рядка та останнього стовпця --- df.iloc[:-1,:-1] це означає, що ви хочете всі стовпці та всі рядки, крім останнього стовпця та останнього рядка ...


6

Питання: як вибрати останній стовпець фрейму даних? Appart @piRSquared, ніхто не відповідає на запитання.

найпростіший спосіб отримати фрейм даних з останнім стовпцем:

df.iloc[ :, -1:]

4

Просто додати до відповіді @Anshul Singh Suryan:

Коли ми розділяємо фрейм даних, щоб отримати лише останній стовпець:

Якщо ми розділимо, як:

y = df.iloc[:,-1:] - y залишається a dataframe

Однак, якщо ми поділимося як

y = df.iloc[:,-1] - y стає a Series .

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

Це стосується будь-якої кількості рядків, які потрібно витягти, а не лише останнього рядка. Наприклад, якщо ви хочете останню nкількість рядків фрейму даних, де n - будь-яке ціле число, менше або рівне кількості стовпців, присутніх у фреймі даних, ви можете легко зробити наступне:

y = df.iloc[:,n:]

Замініть nна потрібну кількість стовпців. Те саме стосується і рядків.


3
df.T.iloc[-1]

df.T.tail(1)

pd.Series(df.values[:, -1], name=df.columns[-1])

1
Я не бачу жодного значення побудови Серії явно з вилучення значень numpy у порівнянні з прямим викликом iloc
Boud,

@Boud, Є багато способів зробити це. Я просто намагався скинути купу. Треба визнати, що третій варіант є найслабшим.
piRSquared

1

Це ще один спосіб зробити це. Я думаю, можливо трохи загальніше:

df.ix[:,-1]

1
У цьому випадку ваша відповідь не рекомендується, оскільки питання явно задає останній стовпець, який базується на розташуванні індексу. ixпоєднує доступ до мітки та індексу розташування. Докладніше див. Тут .
pansen

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