Объединить несколько массивов в datetime - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть и файл Excel, который содержит списки, подобные этому:

month   day     time
1        1      00:00
1        2      02:00
1        3      08:00
2        1      19:00
2        2      04:00

Мне нужно, чтобы они были объектами даты и времени Python, такими как (1,1,00: 00), (1,2,02:00) ...

Может кто-нибудь помочь?

Копировать из комментария : Я сделал это:

Dates={'month': [val[0] for val in datain], 
       'day': [val[1] for val in datain], 
       'time': [val[2] for val in datain]} 
df=DataFrame(Dates, columns= ['day', 'month','time']) 

и это выдает это:

day month time 
0 1 10 0.000000 
1 1 10 0.041667 
2 1 10 0.083333 
3 1 10 0.125000 
4 1 10 0.166667 
5 1 10 0.208333 
6 1 10 0.250000 
7 1 10 0.291667 
8 1 10 0.333333 

Мне нужно объединить их сейчас и получить правильное время.

Ответы [ 2 ]

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

Попробуйте это

from datetime import datetime
import csv
output = []
with open('./test_time.csv') as f:
    rows = csv.DictReader(f)
    for r in rows:
        t1, t2 = r['time'].split(':')
        m = int(r['month'])
        d = int(r['day'])
        y = datetime.today().year
        output.append(datetime(y, m, d, int(t1), int(t2)))
print(output)
0 голосов
/ 23 февраля 2019

С to_datetime вы можете очень легко преобразовать любой столбец в дату / время панд.

df['fulldate'] = df['month'].astype(str)+'/'+df['day'].astype(str)+'/'+df['time']

# Careful, there's not year in the data frame you gave
df['fulldate'] = pd.to_datetime(df['fulldate'], format='%m/%d/%H:%M')

Если вы хотите простой datetime объект, вы можете использовать

df['fulldate'].apply(lambda x: x.to_pydatetime())

# OR

df['fulldate'].dt.to_pydatetime()

Если простой объект datetime действительно вас интересует, вот несколько таймеров выполнения (10 тыс. Строк):

pd.to_datetime(df['fulldate'], format='%m/%d/%H:%M').dt.to_pydatetime()
#220 ms ± 6.51 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

df['fulldate'].apply(lambda date: datetime.strptime(date, '%m/%d/%H:%M'))
#879 ms ± 289 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...