Python 数据帧中的日期转换

Python 数据帧中的日期转换,python,python-3.x,pandas,Python,Python 3.x,Pandas,我的数据框看起来像- date cnt 2020-05-09 301 2020-07-09 402 2020-08-09 403 2020-09-09 402 2020-09-14 512 2020-10-09 403 2020-11-09 403 date cnt 2020-09-05 301 2020-09-07 402 2020-09-08 403 2020-09-09 402 2020-09-14 512 2020-09-10 40

我的数据框看起来像-

date        cnt
2020-05-09  301
2020-07-09  402
2020-08-09  403
2020-09-09  402
2020-09-14  512
2020-10-09  403
2020-11-09  403
date        cnt
2020-09-05  301
2020-09-07  402
2020-09-08  403
2020-09-09  402
2020-09-14  512
2020-09-10  403
2020-09-11  403
我希望我的数据框看起来像-

date        cnt
2020-05-09  301
2020-07-09  402
2020-08-09  403
2020-09-09  402
2020-09-14  512
2020-10-09  403
2020-11-09  403
date        cnt
2020-09-05  301
2020-09-07  402
2020-09-08  403
2020-09-09  402
2020-09-14  512
2020-09-10  403
2020-09-11  403
9月14日,即2020-09-14是正确的,但剩余的日期我需要在“%Y-%m-%d”中进行转换。如何在python中进行转换?下面给出了我的代码-

df['date'] = pd.df(df['date'].astype(str), format='%Y-%m-%d')

您可以执行以下操作:

from datetime import datetime, timedelta
from pandas import DataFrame
import pandas as pd
df = DataFrame.from_dict(
    {'Alfa': [1, 2, 3],
     'Bravo': [4, 5, 6],
     'Date': [datetime.strftime(datetime.now()-timedelta(days=_), "%m/%d/%Y") for _ in range(3)]},
    orient='index',
    columns=['A', 'B', 'C']).T
print(df)
#   Alfa Bravo        Date
#  A    1     4  10/03/2020
#  B    2     5  10/02/2020
#  C    3     6  10/01/2020

df['Date'] = pd.to_datetime(df.Date).dt.strftime('%Y-%m-%d')
print(df)
#   Alfa Bravo        Date
#  A    1     4  2020-10-03
#  B    2     5  2020-10-02
#  C    3     6  2020-10-01

您在问题中没有提供足够的详细信息,但是如果您的
date
列已经是日期值而不是字符串值,我猜您的问题是在日期的初始加载期间

如果您通过pandas
pd.read\u csv()
加载数据,则有许多加载日期的选项,包括尝试自动检测日期格式的选项。示例数据中的几行(但不是所有行)会混淆这种自动检测(它无法区分哪一部分是月份或日期)

如果
date
列已经是日期值,则

df['date']=pd.to_datetime(df['date'].astype(str),格式='%Y-%m-%d')

不会做任何有用的事

如果您确实使用了
pd.read\u csv()
并且磁盘上的日期为YYYY-MM-DD,请尝试改用此选项:

import pandas as pd
import numpy as np
myDateLoader = lambda d: np.datetime64('NaT') if d == '' or d == 'NULL' or d.startswith('9999-12-31') else np.datetime64(datetime.strptime(d[:10], '%Y-%m-%d'))
df = pd.read_csv('file.csv', converters={'date': myDateLoader})

如果它们不是磁盘上的YYYY-MM-DD,则根据需要调整上述格式。

它不起作用…我的数据没有变化frame@JohnDavis你没有提供数据,所以我似乎无法理解你得到的结果。也许你可以加上它。我提供的解决方案在我的具体示例中解决了这个问题。@JohnDavis您尝试过我的解决方案吗?如果有的话,你遇到了什么样的错误?@JohnDavis感谢你的接受。如果可能的话,我也希望能投赞成票,回答你的问题好吗?请发布原始数据的样本,因为它来自该文件。