Преобразование строки в дату в Python - PullRequest
0 голосов
/ 30 мая 2020

В следующем фрагменте кода:

df['Year']=pd.DatetimeIndex(df['Date']).year
df['Month']=pd.DatetimeIndex(df['Date']).month
df['Day']=pd.DatetimeIndex(df['Date']).day
df['MM_DD_str']=df['Month'].astype(str).str.zfill(2)+'-'+df['Day'].astype(str).str.zfill(2)

Поскольку мне нужен только MM-DD, я сделал это так, и теперь это строка. Но позже в программе я хочу, чтобы они были в формате даты. Особенно мне нужен месяц, чтобы построить график. Могу ли я извлечь дату, извлекая из нее месяц.

Отредактировано:

Я хочу построить график, на котором Xtick должен иметь такие месяцы, как январь, февраль, март до De c . Мне нужно извлечь месяц из фрейма данных df ['MM_DD_str'] и сделать их метками для графика.

Это последний код, который я написал для построения графика:

md_str = df['MM_DD_str']
get_month =md_str.apply(lambda d: pd.to_datetime(d, format='%m-%d').month)
#print(get_month)
plt.xticks(get_month,('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'))
plt.show()enter code here

Я не получаю ни вывода, ни ошибки

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Если я правильно понимаю, в настоящее время у вас есть строка даты, например, «06-23», и позже вы захотите извлечь из нее месяц как объект datetime:

md_col = df['MM_DD_str']
get_month = lambda d: pd.to_datetime(d, format='%m-%d').month
md_col.apply(get_month)

get_month is лямбда-функция, которая принимает строку, преобразует ее в объект datetime, а затем извлекает месяц.

.apply () принимает столбец фрейма данных и применяет функцию ко всем строкам в столбец

Обратите внимание: если ваш столбец содержит NaN или строки, которые не могут быть преобразованы в даты, вы можете включить аргумент ошибок в функцию .to_datetime :

get_month = lambda d: pd.to_datetime(d, errors='ignore', format='%m-%d').month
0 голосов
/ 30 мая 2020

Я не понял вопрос должным образом, но столбец df ['date'] можно использовать для построения графика, поскольку он уже находится в формате даты и времени.

pd.to_datetime () можно использовать, чтобы скажем,

date='2019-05'
date=pd.to_datetime(date)
date.month 

РЕДАКТИРОВАТЬ: Matplotlib нужны числовые значения c для построения по оси x, когда вы говорите plt.xticks () в качестве некоторых строковых значений, которые вы не можете построить на графике, однако вы можете изменить метки. так что это пример настройки ваших ярлыков

    import matplotlib.pyplot as plt
    figure=plt.figure()
    ax=plt.axes()
    df=pd.DataFrame()
    months=['june','july','august','september']
    dates=['2019-06','2019-07','2019-08','2019-09']
    df['dates']=dates
    df['values']=[1,4,7,10]
    df['dates']=pd.to_datetime(df['dates']) #pd is for pandas
    df['values'].plot(ax=ax)     
    ax.set_xticks([0,1,2,3,4])   #numerical values that get plotted
    ax.set_xticklabels(months)   #actual labels for those numerical values
...