【发布时间】:2020-04-05 14:22:16
【问题描述】:
我的这个日期列有 6 种不同的日期字符串大小:
df = pd.DataFrame({'date': {0: '2020-03-21T10:13:08', 1: '2020-03-21T17:43:03', 2: '2020-03-21T13:13:30', 3: '2020-03-21T20:43:02', 4: '3/8/20 5:31', 5: '3/8/20 5:19', 6: '3/22/20 23:45', 7: '3/22/20 23:45', 8: '2/1/2020 11:53', 9: '2/1/2020 10:53', 10: '1/31/2020 15:20', 11: '1/31/2020 10:37', 12: '2020-04-04 23:34:21', 13: '2020-04-04 23:34:21'}},
index=range(0,14))
我需要将所有这些不同的日期时间字符串转换为日期格式。我使用的方法是:
找到第一个空格并提取日期
在给定特定字符串长度的情况下更改其格式(每个字符串长度都有其特定的日期格式,您可以在下面的
format参数中看到)在数据帧
df的相应行中执行 (2)。
你可以在这里看到这种方法:
df.loc[df["date"].str.find(" ") == 10, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 10, "date"].str[0:10])
df.loc[df["date"].str.find(" ") == -1, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 10, "date"].str[0:10])
df.loc[df["date"].str.find(" ") == 6, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 6, "date"].str[0:6], format="%m/%d/%y")
df.loc[df["date"].str.find(" ") == 7, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 7, "date"].str[0:7], format="%m/%d/%y")
df.loc[df["date"].str.find(" ") == 8, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 8, "date"].str[0:8], format="%m/%d/%Y")
df.loc[df["date"].str.find(" ") == 9, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 9, "date"].str[0:9], format="%m/%d/%Y")
在第 3 步之前我会一直很完美,我正在尝试找到一种解决方法来更改数据框中的所有格式,但我不明白为什么它没有给出它应该给出的东西。有什么建议吗?
顺便说一句,它必须是可扩展的(我每个格式字符串有很多行)
【问题讨论】:
-
为什么是
-1?有一个可重现的例子,一个具体的问题陈述,StackOverflow 中没有类似的问题。有什么反馈吗?
标签: python pandas date datetime