Извлечение даты в строки - PullRequest
0 голосов
/ 11 февраля 2020

Я хотел бы взять диапазон дат в python, чем создать новую серию / столбец, в котором дата будет отформатирована в виде строки как YYYYMMDD

Это то, что я до сих пор:

start = '20200214' # YYYYMMDD
end = '20200216' # YYYYMMDD

dates = pd.DataFrame(pd.to_datetime(pd.date_range(start,end).date),columns = ['dates'])
dates['Year'] = dates['dates'].dt.year
dates['Month'] = dates['dates'].dt.month
dates['Day'] = dates['dates'].dt.day

Я пытался добавить каждый элемент в виде строки dates.Year.astype(str) + dates.Month.astype(str)+..., но мне нужны начальные нули.

Итак, возьмите первое свидание 2020-02-14 и измените его на 20200214 , Затем промойте и повторите для всех остальных.

Ответы [ 5 ]

1 голос
/ 11 февраля 2020
dates['reformatted_date'] = dates['dates'].dt.strftime('%Y%m%d')

Выход:

       dates  Year  Month  Day reformatted_date
0 2020-02-14  2020      2   14         20200214
1 2020-02-15  2020      2   15         20200215
2 2020-02-16  2020      2   16         20200216
1 голос
/ 11 февраля 2020

Ваше решение возможно с Series.str.zfill:

dates['Year'] = dates['dates'].dt.year
dates['Month'] = dates['dates'].dt.month
dates['Day'] = dates['dates'].dt.day
dates['dates1'] = (dates.Year.astype(str).str.zfill(2) + 
                   dates.Month.astype(str).str.zfill(2) + 
                   dates['Day'].astype(str))

Но проще и быстрее использование Series.dt.strftime:

dates['dates2'] = dates['dates'].dt.strftime('%Y%m%d')

print (dates)
       dates  Year  Month  Day    dates1    dates2
0 2020-02-14  2020      2   14  20200214  20200214
1 2020-02-15  2020      2   15  20200215  20200215
2 2020-02-16  2020      2   16  20200216  20200216
0 голосов
/ 11 февраля 2020

Также эта опция:

d = datetime.datetime.now()
c = str(d)[0:10] //to string
print(c.replace('-', '')) 
//data comes in this format yyyy-mm-dd hh:mm:ss
//output yyyymmdd

или эта:

d = datetime.datetime.now()
c = d.isoformat() //to string
e = c[0:10]
print (e.replace('-', ''))
//data comes in this format yyyy-mm-dd hh:mm:ss
//output yyyymmdd
0 голосов
/ 11 февраля 2020

Используя np.where, проверяем условие, меньше ли оно 10, и добавляем 0 или нет:

dates['final'] = dates['Year'].astype(str) + np.where(dates['Month'] < 10,"0"+dates['Month'].astype(str),dates['Month'].astype(str))+ np.where(dates['Day'] < 10,"0"+dates['Day'].astype(str),dates['Day'].astype(str))
0 голосов
/ 11 февраля 2020
>>> "{:02d}".format(1)
'01'
>>> "{:02d}".format(12)
'12'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...