Доступ только ко второй строке имен столбцов в кадре данных - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу прочитать файл Excel, где вторая строка - это дата в строковом формате, а первая строка - это день недели, соответствующий каждой дате, а затем изменить вторую строку со строки на дату и время.Если я только читаю вторую строку как индекс и полностью пропускаю первую строку с днями, я делаю следующее, чтобы преобразовать ее в дату и время:

Receipts_tbl.columns = pd.to_datetime(Receipts_tbl.columns)

Как мне это сделать, если у меня есть мультииндексдатафрейм, где первая строка индексов остается в будние дни, а я хочу, чтобы вторая была преобразована в datetime?

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Если у вас есть эти данные в буфере обмена

Day Date Data

Mo 2018-08-06 blah
Mo 2018-08-06 blah
Mo 2018-08-06 blah
Tu 2018-08-07 blah

Попробуйте

import pandas as pd
df = pd.read_clipboard().set_index(['Day', 'Date'])

, чтобы получить мультииндексированный пример. Затем измените дату на Datetime

df2 = df.reset_index()
df2.Date = pd.to_datetime(df2.Date, yearfirst=True)

После этого вы можете снова установить мультииндекс, если хотите.

Обратите внимание, посмотрите документацию по to_datetime, если ваша строка даты и времени отформатирована по-другому.Предполагается, что месяц будет первым, если вы не установили для параметра dayfirst или yearfirst значение True.

0 голосов
/ 14 сентября 2018

Вы не привели пример того, как выглядит ваш источник данных, поэтому я делаю вывод.

Если вы используете pd.read_excel с header=None, первые две строки будут обрабатываться как данные, и вы сможете манипулировать ими для достижения своей цели. Вот минимальный пример, с примером «реальной» строки данных ниже:

df = pd.DataFrame([['Mon', 'Tues'], ['10-02-1995', '11-23-1997'],
              [12, 32]])

#   0           1
#0  Mon         Tues
#1  10-02-1995  11-23-1997
#2  12          32

Затем преобразуйте первую строку в дату и время, как вы сказали в своем вопросе.

df.loc[1] = pd.to_datetime(df.loc[1])

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

df.columns = df.T.set_index([0,1]).index.set_names(['DOW', 'Date'])

Наконец, выберите из второй строки вниз, так как первые две строки теперь находятся в столбцах.

df = df.loc[2:].reset_index()

df
#DOW    Mon                 Tues
#Date   812592000000000000  880243200000000000
#0      12                  32

Обратите внимание, что DOW и Date теперь являются многоуровневым индексом для столбцов, а строки 'data' были переиндексированы, чтобы начать с 0.

Пожалуйста, дайте мне знать, если я неправильно понял ваш вопрос.

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