如何标准化熊猫中的不同日期格式?

时间:2019-02-25 17:17:32

标签: python pandas

我有一个csv格式的数据集,其中包含一列中的日期。我已将此数据集导入到python pandas中,并且此date列显示为一个对象。我需要将此列转换为日期时间,但是我有问题。此日期列具有两种格式的日期格式 1. 11/7/2013 11:51 2. 13-07-2013 08:33:16

我需要将一种格式转换为另一种格式,以便在python中具有标准日期格式才能进行分析。我该怎么办?

这两种格式的日期都有很多行,因此当我尝试使用以下代码将第二种格式转换为第一种格式时

  

print(df ['date']。apply(lambda x:pd.to_datetime(x,format ='%d /%m /%Y   %H:%M')))

我收到以下错误

  

ValueError:时间数据'13 -07-2013 08:33:16'与格式不匹配   '%d /%m /%Y%H:%M'(匹配)

那么以一种格式标准化此列的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

尝试删除format参数并在传递给infer_datetime_format=True的参数中设置pd.to_datetime

答案 1 :(得分:0)

您可以尝试以下

import pandas as pd
import numpy as np


n=1000
ch = ['13-07-2013 08:33:16', '13/07/2013 08:33:16']
df = pd.DataFrame({"date": np.random.choice(ch,n)})

df["date"] = df["date"].str.replace("/","-").astype("M8[us]")

更新 我只是意识到我使用的格式与您想要的格式不同。我强烈建议您使用标准格式作为YYYY-MM-DD,并使用datetime作为类型而不是字符串。有很多文章解释了为什么这样做在RAM上效率更高,然后又更快。

对于只有1000行的df的小比较

%%timeit
out = df["date"].str.replace("/","-").astype("M8[us]")

146 ms ± 5.62 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


%%timeit
out = df["date"].apply(lambda x: pd.to_datetime(x)\
                                   .strftime('%d/%m/%Y %H:%M'))

396 ms ± 22.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


%%timeit
out = df['date'].apply(lambda x: pd.to_datetime(x,
                       format='%d/%m/%Y %H:%M',
                       infer_datetime_format= True))

425 ms ± 4.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

答案 2 :(得分:0)

最好使用strftime():

df = pd.DataFrame({'Date': ['11/7/2013 11:51','13-07-2013 08:33:16']})
df['Clean_Date'] = df.Date.apply(lambda x: pd.to_datetime(x).strftime('%d/%m/%Y %H:%M'))
print(df)

输出:

                  Date        Clean_Date
0      11/7/2013 11:51  07/11/2013 11:51
1  13-07-2013 08:33:16  13/07/2013 08:33