Python: вычисление по строке в Pandas

#python-3.x #pandas

#python-3.x #pandas

Вопрос:

Я пытаюсь извлечь данные из файла Excel (.xls), и я решил использовать Pandas в качестве библиотеки, потому что это разрешено на моем корпоративном компьютере.

Большая часть информации, с которой я сталкиваюсь, описывающей Pandas, ориентирована на использование Jupyter или экосистемы Anaconda, и у меня возникают проблемы с тем, как перевести это в традиционный скрипт python.

Это пример таблицы, с которой я тестирую:

         Date    a   b   c
1   1-Jan-19    100 200 300
2   1-Feb-19    101 201 301
3   1-Mar-19    102 202 302
4   1-Apr-19    103 203 303
5   1-May-19    104 204 304
6   1-Jun-19    105 205 305
7   1-Jul-19    106 206 306
8   1-Jul-19    107 207 307
9   1-Aug-19    108 208 308
10  1-Sep-19    109 209 309
  

Моя цель — взять строку с максимальной датой, которая будет сегодняшней, и оценить всю информацию в этой строке как словарь или JSON, например

 { 
Date: 1-Sep-19,
a: 109,
b: 209,
c: 309 
}
  

(Меня не волнует столбец индекса)

Я застрял в попытке оценить последнюю строку. Это то, что у меня есть до сих пор:

 import pandas as pd

xls = pd.ExcelFile(r'C:PathExcel Pandas Connector Test.xls')
df = pd.read_excel(xls, r'Sheet1')

today = df['Date'].max()     # returns the max value in the date column

print(today)
  

Я нашел максимальную дату, но что мне нужно сделать, чтобы получить самые новые данные из этой таблицы, используя эту дату?

Ответ №1:

Просто сделайте

 df[df.Date == date.Date.max()].to_dict(orient='records')[0]
  

Это просто выбирает строки вашего фрейма данных с максимальным значением в Date столбце, а затем преобразует результат в список dicts, по одному для каждой такой строки.

Исходя из вашего вопроса, я предполагаю, что у вас есть только одна запись с самой последней датой, поэтому все должно быть в порядке, выбрав первую запись в списке. Просто будьте осторожны с повторяющимися датами, так как при этом будет выбрана первая, которая появляется в dataframe.

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

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

1. Вы имели в виду: df[df. Date == df[‘Date’].max()].to_dict(orient=’records’)[0]

2. Спасибо, я внес изменения, которые я прокомментировал выше, и поместил их в переменную, чтобы распечатать, ваше предложение — это именно то, что мне нужно, и оно более краткое, чем тот путь, который я выбрал.

3. df.Date и df['Date'] два эквивалентных способа выбора столбца.

4. Ok. df.Date вызвал исключения в моей установке Windows.