Можно ли вместо этого поместить заголовок столбца данных Pandas в качестве нижнего колонтитула? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть массив numpy, и для простоты он пуст.Размеры 8х12.У меня определены заголовки строк и столбцов.

column = [_ for _ in 'ABCDEFGH']
row = list(range(12, 0, -1))
self.board = np.full((12, 8, '||')
dataframe = pd.DataFrame(self.board, index=row, columns=column)

Это выглядит так:

     A   B   C   D   E   F   G   H
12  ||  ||  ||  ||  ||  ||  ||  ||
11  ||  ||  ||  ||  ||  ||  ||  ||
10  ||  ||  ||  ||  ||  ||  ||  ||
9   ||  ||  ||  ||  ||  ||  ||  ||
8   ||  ||  ||  ||  ||  ||  ||  ||
7   ||  ||  ||  ||  ||  ||  ||  ||
6   ||  ||  ||  ||  ||  ||  ||  ||
5   ||  ||  ||  ||  ||  ||  ||  ||
4   ||  ||  ||  ||  ||  ||  ||  ||
3   ||  ||  ||  ||  ||  ||  ||  ||
2   ||  ||  ||  ||  ||  ||  ||  ||
1   ||  ||  ||  ||  ||  ||  ||  ||

Я хочу знать, могу ли я поместить столбец внизу, а не вверху?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Я искал ответ на ту же проблему, поэтому я нашел ваш вопрос.
Я знаю, что этот ответ опоздал на 25 дней, но это мой первый ответ на StackOverflow (или на любом другом сайте), поэтому я 'Я все равно делаю это.
Кроме того, возможно, кому-то еще понадобится ответ на этот вопрос в будущем.Надеюсь, это поможет.

Я новичок, поэтому я рад получить указания / критику (независимо от того, насколько они велики или малы) в отношении того, как я отреагировал.

Чтобы воссоздать ваш макет DF, у меня былочтобы исправить некоторые скобки в вашем коде и
избавиться от 'self' как части переменной b / c, это вызвало ошибку для меня.Кроме того, я добавил sort_index (), чтобы перевернуть индекс, если он у вас есть.

    import numpy as np
    import pandas as pd

    column = [_ for _ in 'ABCDEFGH']
    row = range(12, 0, -1)
    # board = np.full((12, 8), 7) # to test dtype changes
    board = np.full((12, 8), '||')
    df0 = pd.DataFrame(board, index=row, 
    columns=column).sort_index(ascending=False)

Вручную создайте dict, где keys = column.values ​​и values ​​= строки с одинаковыми именами.

    footer = {'A':'A', 'B':'B', 'C':'C', 'D':'D', 'E':'E', 'F':'F', 'G':'G', 'H':'H'}

Или заставьте python сделать это за вас

    keys = list(df0.columns.values)
    values = list(df0.columns.values)
    footer = dict(zip(keys, values))

Добавить df0 с указанием.

    df1 = df0.append(footer, ignore_index=True)

Получил нижний колонтитул, но не перевернул индекс.
Ошибка "МожетДобавлять Серию можно только в том случае, если ignore_index = True или у Серии есть имя ", поэтому индекс не переворачивается.Так что это может сработать для тех, кому не нужно обращать индекс.Это то, что мне нужно для отображения верхних и нижних колонтитулов для статистики бейсбола.

    df2 = df0.append(pd.Series((pd.Series(footer)), name='Footer'))  # Change 'Footer' to any text

Нужно было поместить нижний колонтитул во вложенный pd.Series () и добавить имя, чтобы исправить вышеуказанную ошибку.
Без вложенияВы получаете эту ошибку: "append () получил неожиданный аргумент ключевого слова 'name'"

    df3 = df0.append(pd.Series((pd.Series(footer)), name=''))  # Same as df2 but blank name

df0 соответствует вашему макету данных.df1 - это решение с безымянным нижним колонтитулом, но с восходящим индексом.df2 - это решение с заголовком и правильным индексом.df3 - это решение с неназванным нижним колонтитулом и правильным индексом.

Все вышеперечисленное имеет как верхние, так и нижние колонтитулы, а OP нужны только нижние колонтитулы.Итак, я нашел это ниже, чтобы завершить задачу: Панды - удалить имя столбца
@jezrael дал эту краткую строку, чтобы избавиться от заголовков (но с предостережениями безопасности - может быть лучше сохранить оба заголовкаи нижние колонтитулы.)

    df4 = df3
    df4.columns = [''] * len(df4.columns)

    print(df4)  # OP's solution

Добавление ряда строк к существующим столбцам DF преобразует все dtypes в объекты.

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

Надеюсь, это поможет.

0 голосов
/ 07 февраля 2019

Если вас интересует моноширинный вывод для вашего pandas фрейма данных, вы можете проверить табуляцию .

Хотя он не поддерживает нижние колонтитулы, он прекрасно работает изящик с pandas фреймами данных.

from tabulate import tabulate
import pandas as pd

df = pd.DataFrame({'col_two' : [0.0001, 1e-005 , 1e-006, 1e-007],
                   'column_3' : ['ABCD', 'ABCD', 'long string', 'ABCD']})
print(tabulate(df, headers='keys', tablefmt='psql'))

+----+-----------+-------------+
|    |   col_two | column_3    |
|----+-----------+-------------|
|  0 |    0.0001 | ABCD        |
|  1 |    1e-05  | ABCD        |
|  2 |    1e-06  | long string |
|  3 |    1e-07  | ABCD        |
+----+-----------+-------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...