我有一个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'(匹配)
那么以一种格式标准化此列的最佳方法是什么?
答案 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