Есть ли функция 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:]]