Streamlit pandas日期格式

z3yyvxxp  于 2023-05-15  发布在  其他
关注(0)|答案(2)|浏览(135)

无论我做什么,streamlit都会显示我的pandas日期列,如下所示:

然而,当在我的终端中打印这些列时,它们显示为“2023-05-11”和“11 May 23”。
这是我用来将日期时间列转换为日期列的函数:

def _get_date(self):
        self.df["Date"] = (
            pd.to_datetime(self.df[self.date], utc=True)
            .dt.tz_convert("Europe/London")
            .dt.date
        )
        self.df["Test"] = pd.to_datetime(self.df["Date"], format='%Y-%m-%d').dt.strftime('%d %b %y')
        self.df['Test2'] = pd.to_datetime(self.df['Datetime'])
        self.df["Test2"] = self.df['Test2'].astype(str)
        self.df["Test2"] = [d[0] for d in self.df["Test2"].str.split(" ")]

当在我的控制台中打印dataframe时,这是我看到的:

原始日期时间列的格式为“2023-05- 11 T18:00:00.000+01:00”

更新:

我现在知道是什么导致了这种转变。我一直在使用from streamlit_extras.dataframe_explorer import dataframe_explorer,它显然会查找所有日期列,并将它们转换回yyyy-mm-dd hh:mm:ss格式。

ryhaxcpt

ryhaxcpt1#

您的_get_date函数目前正在使“Date”和“Test”列显示相同的内容。如果你希望它们显示不同的值,你可以这样做:

def _get_date(df):
    df["Date"] = (
        pd.to_datetime(df["Datetime"], utc=True).dt.tz_convert("Europe/London").dt.date
    )
    df["Test"] = pd.to_datetime(df["Date"], format="%Y-%m-%d").dt.strftime("%d %b %y")
    df["Date"] = df["Date"].astype(str)

在此版本中,“日期”列显示格式2023-05-11,“测试”显示11 May 23

k10s72fa

k10s72fa2#

试着测试一个简单的例子:

import pandas as pd
import streamlit as st

df = pd.DataFrame({'Datetime': ['2023-05-11T18:00:00.000+01:00', '2023-05-12T18:00:00.000+01:00']})
df['Datetime'] = pd.to_datetime(df['Datetime'])
df['Date'] = df['Datetime'].dt.strftime('%d %b %y')

st.dataframe(df)

你必须返回 Dataframe 。修改不到位:

import pandas as pd
import streamlit as st

# Initial state
df = pd.DataFrame({'Datetime': ['2023-05-12', '2023-05-06']})
df['Datetime'] = pd.to_datetime(df['Datetime'])

def _get_date(df):
     df["Date"] = (
            pd.to_datetime(df["Datetime"], utc=True)
            .dt.tz_convert("Europe/London")
            .dt.date
        )
     df["Date"] = pd.to_datetime(df["Date"], format='%Y-%m-%d').dt.strftime('%d %b %y')
     df["Date"] = df["Date"].astype(str)
     df["Test"] = df["Date"].copy()
     return df  # <- HERE

st.dataframe(_get_date(df))

相关问题