Получить имя столбца с сегодняшней датой относительно указанной строки c в кадре данных - PullRequest
1 голос
/ 20 апреля 2020

enter image description here У меня есть pandas кадр данных, считанный из Excel, как показано ниже. Метки столбца - это даты. Учитывая, что сегодняшняя дата 2020-04-13, я хочу получить значения строк C в течение следующих 7 дней.
В настоящее время я устанавливаю индекс и получаю значения C, когда я печатаю строки, я получаю вывод для всех дат и их значений C.
Я знаю, что должен использовать date.today(). Может кто-нибудь сообщить мне, как захватить столбец сегодняшней даты (2020-04-13) для строки C? Я новичок в Python / pandas и только изучаю концепции фреймов данных.

input_path = "./data/input/data.xlsx"   
pd_xls_obj = pd.ExcelFile(input_path)   
data = pd.read_excel(pd_xls_obj,sheet_name="Sheet1",index_col='Names')   
rows = data.loc["C"] 

enter image description here

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Простой способ сделать это - загрузить данные из рабочей книги с заголовками, а затем сделать (словами) что-то вроде: Показать мне из data [колонка: где дата сегодня] [строка: где data ['Names'] равно 'C']

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

пример кода ниже; Мне нужно было использовать "try: _____ кроме:", потому что один из ваших заголовков является строкой, а ".date ()" будет с ошибкой.

import pandas as pd
import datetime


INPUT_PATH = "C:/temp/data.xlsx"

pd_xls_obj = pd.ExcelFile(INPUT_PATH)

data = pd.read_excel(pd_xls_obj, sheet_name="Sheet1")

column_headers = data.columns

# loop though headers and check if todays date is equal to the column header
for column_header in column_headers:
    # python would throw you an Attribute Error for all Headers which are not
    # in the format datetime. In order to avoid that, we use a try - except
    try:
        # if the dates are equal, print an output
        if column_header.date() == datetime.date.today():
            # you can read the statement which puts together your result as
            # follows:
            # data[header_i_am_interested_in][where: data['Names'] equals 'C']
            result = data[column_header][data['Names'] == 'C']
            print(result)
    except AttributeError:
        pass
1 голос
/ 20 апреля 2020

В pandas нет ничего необычного в том, чтобы использовать дату в качестве метки столбца, а не в качестве индекса строки, и поскольку pandas dtypes go по столбцу, а не по строке, , что означает pandas, будет некорректно определить тип метки столбца как «дата / время», а не строку / объект , и, следовательно, операторы сравнения и арифметики c для него не будут работать должным образом, поэтому вам придется выполнять множество ненужных ручных операций, которых можно избежать, и преобразования в / из даты и времени. Вместо этого:

Вы должны транспонировать кадр данных сразу во время чтения :

data = pd.read_excel(...).T

Теперь ваши даты будут в одном столбце с тем же типом d и вы можете преобразовать его с помощью pd.to_datetime().

Затем убедитесь, что dtypes верны, то есть dtype индекса должен быть 'datetime', а не 'object', 'string' et c. (Пожалуйста, опубликуйте свой набор данных или URL в вопросе, чтобы сделать это воспроизводимым).

Теперь «C» будет столбцом вместо строки.

Вы можете получить доступ ко всему вашему «C 'столбец с:

rows = data[:, 'C']

... и аналогично вы можете написать выражение для вашего подмножества строк для желаемых дат. В ожидании вашего фрагмента данных, чтобы показать код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...