熊猫数据框中的日期转换

时间:2020-10-03 07:56:28

标签: 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  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')

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

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

答案 1 :(得分:0)

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

如果您是通过熊猫pd.read_csv()加载数据的,那么有很多选项可以用来加载日期,包括可以自动检测日期格式的选项。样本数据中的几行(但不是全部行)会使这种自动检测感到困惑(无法分辨是哪部分是月或日)。

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

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

不会做任何有用的事情。

如果您确实使用过pd.read_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,则根据需要调整上述格式。