Pandas - 使用仅包含月份和年份的日期时间列进行计算

Pandas - Calculate with datetime column with month and year only

我很难处理数据框中的一列,它应该只包含月份和年份。

df["Datum"] = pd.to_datetime(df["Datum"], format="%d.%m.%Y").dt.date
df["Month"] = pd.to_datetime(df['Datum']).dt.strftime('%B-%Y')

我将此列用作我的 streamlit 应用程序的输入,如下所示:

start_date = df["Month"].min()
end_date = df["Month"].max()

start, end = st.sidebar.slider("Label", start_date, end_date, (start_date, end_date))

Pandas 似乎将 dt.strftime('%B-%Y') 作为字符串处理,不允许我用它进行计算。

TypeError: unsupported operand type(s) for -: 'str' and 'str'

st.write(df["Month"].max() - df["Month"].min())

也会因同样的错误而失败。

如何使用这种特定格式进行计算?

How can I use this specific format for calculations?

如果需要在 python、pandas 中使用日期时间,则意味着无法通过 strftime.

将输出转换为字符串

因此需要在 write 函数中转换为自定义字符串:

df["Datum"] = pd.to_datetime(df["Datum"], format="%d.%m.%Y").dt.date
#if need datetiems without times
#df["Datum"] = pd.to_datetime(df["Datum"], format="%d.%m.%Y").dt.normalize()

#if need working with years and months only convert datetimes to month periods
#df["Datum"] = pd.to_datetime(df["Datum"], format="%d.%m.%Y").dt.to_period('m')

start_date = df["Datum"].min()
end_date = df["Datum"].max()

start, end = st.sidebar.slider("Label", start_date.strftime('%B-%Y'), end_date.strftime('%B-%Y'), (start_date.strftime('%B-%Y'), end_date.strftime('%B-%Y')))