панды to_datetime из двух текстовых столбцов - PullRequest
0 голосов
/ 21 июня 2019

У меня есть следующие временные ряды в формате ниже.

Какой самый простой способ преобразовать / объединить столбцы «дата» и «время» в формат даты-времени панд?

Iзнаю, что это должно быть pandas.to_datetime (date ...).Но я не могу понять, в каком формате их объединить.

  ccy      date  time    open    high     low   close
0  EURUSD  20190211   100  1.1318  1.1319  1.1317  1.1319
1  EURUSD  20190211   200  1.1320  1.1322  1.1319  1.1319
2  EURUSD  20190211   300  1.1318  1.1319  1.1318  1.1319
3  EURUSD  20190211   400  1.1319  1.1319  1.1318  1.1318
4  EURUSD  20190211   500  1.1318  1.1318  1.1318  1.1318

Ответы [ 3 ]

0 голосов
/ 21 июня 2019

Кажется, что date и time в настоящее время хранятся как целые числа.Поэтому вам может потребоваться привести их как строки, чтобы выполнить нарезку строк.

def convert_to_datetime(date, time):
    datestr = str(date)
    timestr = str(time)
    result = datestr[0:4] + "/" + datestr[4:6] + "/" + datestr[6:]
    result = result + " " + timestr[0:-2] + ":"+ timestr[-2:]
    return pd.to_datetime(result)

df["datetime"] = df.apply(lambda x: convert_to_datetime(x["date"], x["time"], axis=1)

0 голосов
/ 21 июня 2019

Два способа сделать это:

Первый метод: (без панд)

# convert date
data['ddate']= [str(dt)[:4]+'-'+str(dt)[4:6]+'-'+str(dt)[-2:] for dt in 
# convert time 
data['dtime']= [str(dt)[:-2]+':'+str(dt)[-2:] for dt in data['dtime']]
# join 
data['datetime'] = data['ddate'] + ' ' + data['dtime'] # space or whatever you want
# delete unneeded columns 
del data['ddate'], data['dtime']

Второй метод: (с использованием панд)

data['datetime']= pd.to_datetime([str(dt)+str(tm) for dt,tm in data[['date','time']].values],format='%Y%d%m%H%M')
0 голосов
/ 21 июня 2019

Это то, как вы будете выполнять преобразование, но вы должны убедиться, что столбец времени имеет смысл - ваша таблица сейчас неоднозначна, когда отображается 3 цифры времени.Кроме того, убедитесь, что ваши столбцы даты и времени являются строками, иначе преобразуйте их в строки, потому что для разумного их объединения потребуется это.

import pandas as pd
df=pd.DataFrame({'date':['20190211','20190211'],'time':['0100','0200']})
pd.to_datetime(df['date']  + df['time'], format='%Y%d%m%H%M')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...