Как напечатать голову и хвост панд без столбцов на хвосте

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

Я поменял местами свои данные в pandas, и я хочу напечатать как голову, так и хвост друг над другом без столбцов в хвостовой части.

Код:

 import datetime 
import itertools as it
import numpy as np
import csv

start = datetime.datetime(1996, 12, 16)
end = datetime.datetime(2019, 4, 4)

df = pd.read_csv('Filename.txt')
df.columns = ['C1','c2','c3','c4']
df = df.set_index('C1')
reversed_df = df.iloc[::-1]

print(reversed_df.head(),reversed_df.tail())
  

Вывод:

              c2  c3  c4
C1                  
1900-12-16   8   0   0
1900-12-17   8   0   1
1900-12-18   8   0   2
1900-12-19   8   0   3
1900-12-20   8   0   4            c2  c3  c4
C1                
2000-03-30   8   0   5
2000-03-31   8   0   6
2000-04-01   8   0   7
2000-04-02   8   0   8
2000-04-03   8   0   9
  

Я хотел бы избавиться от второго (C1, c2, c3, c4) над хвостом. Итак, результат выглядит так, как показано ниже.

              c2  c3  c4
C1                  
1900-12-16   8   0   0
1900-12-17   8   0   1
1900-12-18   8   0   2
1900-12-19   8   0   3
1900-12-20   8   0   4           

2000-03-30   8   0   5
2000-03-31   8   0   6
2000-04-01   8   0   7
2000-04-02   8   0   8
2000-04-03   8   0   9
  

Ответ №1:

Я не могу создать заголовок или хвост этого запроса, но я могу сделать оба с помощью pd.concat :

 n = 5
head_tail = pd.concat([df[:n], df[-n:]])
  

Вы также можете распечатать голову и хвост отдельно. Однако, чтобы удалить заголовки из tail , вызовите to_string и передайте header=False ,

 print(df.tail().to_string(header=False))
  

Ответ №2:

Редактировать: добавить опцию в случае, если ‘c1’ задан как индекс строки

Я просто понимаю, что ваши данные имеют c1 в качестве индекса строки. В этом случае вам просто нужно добавить index_names=False к to_string

 In [84]: df
Out[84]:
            c2  c3  c4
c1
1900-12-16   8   0   0
1900-12-17   8   0   1
1900-12-18   8   0   2
1900-12-19   8   0   3
1900-12-20   8   0   4
2000-03-30   8   0   5
2000-03-31   8   0   6
2000-04-01   8   0   7
2000-04-02   8   0   8
2000-04-03   8   0   9


In [87]: print(df.head(2).to_string(header=df.columns.tolist(), index_names=False), df.tail(2).to_string(header=False, index_names=False) ,sep='nn')
           c2 c3 c4
1900-12-16  8  0  0
1900-12-17  8  0  1

2000-04-02  8  0  8
2000-04-03  8  0  9
  

Примечание: я использую df для простой демонстрации. Просто замените df на reversed_df , чтобы получить желаемый результат.

Оригинал:
Это выполнимо, если вы используете to_string , tolist и print параметры.

 In [59]: df
Out[59]:
            c2  c3  c4
1900-12-16   8   0   0
1900-12-17   8   0   1
1900-12-18   8   0   2
1900-12-19   8   0   3
1900-12-20   8   0   4
2000-03-30   8   0   5
2000-03-31   8   0   6
2000-04-01   8   0   7
2000-04-02   8   0   8
2000-04-03   8   0   9
  

Я просто распечатываю head(2) и tail(2) для демонстрации

 In [65]: print(df.head(2).to_string(header=df.columns.tolist()), df.tail(2).to_string(header=False) ,sep='nn')
           c2 c3 c4
1900-12-16  8  0  0
1900-12-17  8  0  1

2000-04-02  8  0  8
2000-04-03  8  0  9
  

Ответ №3:

Близко к тому, что предоставил cold, но здесь я использую drop

 n=5
print(df.drop(df.index[n:-n]))


df.drop(df.index[n:-n]).to_string(header=False)
  

Комментарии:

1. Это работает, но я хочу, чтобы данные были отменены. При этом самые старые данные находятся вверху, а самые новые — внизу.

2. Моя ошибка, мне нужно было добавить reversed_df, чтобы изменить данные. Спасибо.

3. @JordanGraham тогда, прежде чем вы выполните мое решение, df = df.iloc[::-1]