无法将对象转换为 Python 中的日期 (Y-m-d) 格式

Unable to convert object to Date(Y-m-d) format in Python

我知道 string/object 到日期时间转换有多个答案。我已经尝试了其中的大部分,但仍然无法获得想要的结果。

我有 2024-08-01 00:00:00.0000000 格式的日期,我只想要 2024-08-01 格式的日期部分。

我的数据框格式为:日期是对象类型

Date 
2024-08-01 00:00:00.0000000 
2024-09-01 00:00:00.0000000

使用 Whosebug 中提供的答案,我执行了:

from dateutil.parser import parse
df['DATE'] = df['DATE'].apply(lambda x : parse(x)) #This will give in format 2024-08-01 00:00:00 of dtype datetime.

然后我用strftime把它转换成%Y-%m-%d格式。

def tz_datetime(date_tz):
    date_obj = dt.datetime.strftime(date_tz, '%Y-%m-%d') 
    return date_obj
df['DATE'] = df['DATE'].apply(tz_datetime)

我的 DATE 列现在是对象数据类型。 df.head() 给我:

DATE
2024-08-01
2024-09-01

然后我用pd.to_datetime把它转换成日期时间对象。

df['DATE'] = pd.to_datetime(df['DATE'], format="%Y-%m-%d")

我还使用 floor() 选项来获取所需日期格式的日期。

df['DATE'] = df['DATE'].dt.floor('d')

现在是 datetime64[ns] 中的 DATE 数据类型。 df.head() 也显示了所需的格式。

但是,当我将其导出为 csv 格式或再次 display(df) 时,我的 DATE 列显示不同的格式。

DATE
2024-10-01T00:00:00.000+0000
2024-08-01T00:00:00.000+0000
2024-07-01T00:00:00.000+0000
2024-06-01T00:00:00.000+0000
2017-10-01T00:00:00.000+0000

我用尽了所有方法来获取格式为“%Y-%m-%d”的日期。有人能解释一下我做错了什么吗,为什么这个日期格式在我 .head() 时显示正确,而在我 display() 数据框时显示 DATE 列的 different/actual 值。

如果您还没有使用它,date_format 参数可能就是您所缺少的。

df.to_csv(filename, date_format='%Y-%m-%d')

正如您在上面所演示的那样,将数据截断为 'Y-m-d' 仍然会在导出时提供更长的格式 'Y-m-d H:M:S.f'(和一个额外的零),因为日期类型没有改变。这意味着日期类型的输出格式也没有改变。

另请注意:您希望避免使用 strftime() 覆盖数据只是为了获得不同的格式,因为您可能在以后的分析中需要丢失的数据。