#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]