无法将对象转换为 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()
覆盖数据只是为了获得不同的格式,因为您可能在以后的分析中需要丢失的数据。
我知道 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()
覆盖数据只是为了获得不同的格式,因为您可能在以后的分析中需要丢失的数据。