Есть ли функция pandas для отображения первых/последних n столбцов, как в .head() &.tail()?

Мне нравится использовать функции .head() и .tail() в pandas, чтобы косвенно отображать определенное количество строк (иногда я хочу меньше, иногда хочу большего!). Но есть ли способ сделать это со столбцами DataFrame?

Да, я знаю, что я могу изменить параметры отображения, как в: pd.set_option('display.max_columns', 20)

Но это слишком неуклюже, чтобы постоянно меняться "на лету", и в любом случае это заменит только функциональность .head(), но не функциональность .tail().

Я также знаю, что это можно сделать с помощью аксессора: yourDF.iloc[:,:20] для эмуляции .head(20) и yourDF.iloc[:,-20:] для эмуляции .tail(20).

Он может выглядеть как короткий код, но, честно говоря, он не интуитивно и не быстро, как при использовании .head().

Есть ли такая команда? Я не мог найти его!

Ответ 1

Нет, такие методы не предоставляются Pandas, но сами эти методы легко сделать:

import pandas as pd
def front(self, n):
    return self.iloc[:, :n]

def back(self, n):
    return self.iloc[:, -n:]

pd.DataFrame.front = front
pd.DataFrame.back = back

df = pd.DataFrame(np.random.randint(10, size=(4,10)))

Итак, теперь все DataFrame будут обладать этими методами:

In [272]: df.front(4)
Out[272]: 
   0  1  2  3
0  2  5  2  8
1  9  9  1  3
2  7  0  7  4
3  8  3  9  2

In [273]: df.back(3)
Out[273]: 
   7  8  9
0  3  2  7
1  9  9  4
2  5  7  1
3  3  2  5

In [274]: df.front(4).back(2)
Out[274]: 
   2  3
0  2  8
1  1  3
2  7  4
3  9  2

Если вы поместите код в служебный модуль, скажем, utils_pandas.py, вы можете активировать его с помощью оператора импорта:

import utils_pandas

Ответ 2

Это такой причудливый вопрос! Как насчет этого:

def chead(self, n):
    return self.iloc[:,:n]

def ctail(self, n):
    return self.iloc[:,-n:]

pd.DataFrame.chead = chead
pd.DataFrame.ctail = ctail

df = pd.DataFrame({i:range(10) for i in range(50)})
df.chead(5)
Out[692]: 
   0  1  2  3  4
0  0  0  0  0  0
1  1  1  1  1  1
2  2  2  2  2  2
3  3  3  3  3  3
4  4  4  4  4  4
5  5  5  5  5  5
6  6  6  6  6  6
7  7  7  7  7  7
8  8  8  8  8  8
9  9  9  9  9  9

df.ctail(5)
Out[693]: 
   45  46  47  48  49
0   0   0   0   0   0
1   1   1   1   1   1
2   2   2   2   2   2
3   3   3   3   3   3
4   4   4   4   4   4
5   5   5   5   5   5
6   6   6   6   6   6
7   7   7   7   7   7
8   8   8   8   8   8
9   9   9   9   9   9

Ответ 3

Вы можете просто использовать df.col.head(n) для того, что вы пытаетесь сделать... см. пример ниже,

df = pd.DataFrame({'a': [i for i in range(101)],
                   'b': [i for i in range(101)]})
df.a.head(4)

Out[37]:
0    0
1    1
2    2
3    3
Name: a, dtype: int64

Ответ 4

Ближайшая эмуляция, которую вы можете добавить в функцию:

number_of_columns = 5 # eg.
head_cols = df[df.columns[:number_of_columns]]
tail_cols = df[df.columns[-number_of_columns:]]