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')))
我很难处理数据框中的一列,它应该只包含月份和年份。
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')))