pandas 如何将对象转换为 DateTime
How to convert an object into DateTime in pandas
我有一个非常混乱的文件,其中有我需要读取的日期时间并将其用作索引。 (我添加这个是为了澄清它看起来如何我的数据)。我凌乱的文件是日期时间所在的样子:
31.01.2016 13:59:13 31.01.2016 13:59:13 31.01.2016 14:39:20 31.01.2016 14:39:20 31.01.2016 15:19:27 31.01.2016 15:19:27 31.01.2016 15:59:34 31.01.2016 15:59:34 31.01.2016 16:39:41 31.01.2016 16:39:41 31.01.2016 17:19:48 31.01.2016 17:19:48 31.01.2016 17:59:55 31.01.2016 17:59:55 31.01.2016 18:40:02
我读取文件的代码是下一个(真是乱七八糟的文件):
df = pd.melt(pd.read_csv(file, delimiter='\t', skiprows=3, index_col=0, decimal=",").rename(columns={"Unnamed: 1":"Depth [m]"}), id_vars=["Depth [m]"], var_name="Date", value_name="Temperature").set_index("Date"))
我得到的结果是一个 DataFrame。这个 DataFrame 有一列应该转换为 DateTime (Date),之后,我将把它用作索引。当我阅读 DataFrame 并尝试将日期转换为 DateTime 时,它不起作用。在这一步中,日期是一个“对象”。我的数据如下所示:
Date Depth [m] Temperature
0 01.01.2016 00:32:09 0.0 26.59
1 01.01.2016 01:12:16 0.0 26.67
2 01.01.2016 01:52:23 0.0 26.45
3 01.01.2016 02:32:30 0.0 26.41
4 01.01.2016 03:12:37 0.0 26.43
当我应用带有“强制”的 pd.to_datetime() 时,接下来会发生:
df["Date] = pd.to_datetime(df["Date], errors="coerce", format= "%d.%m.%Y %H:%M:%S" )
DatetimeIndex: 10001662 entries, 2016-01-01 00:32:09 to 2015-12-31 23:52:02
这可行,但我在
中得到了很多 NAT 值
当我使用“忽略”应用 pd.to_datetime() 并检查接下来发生的 DF 信息时:
df["Date] = pd.to_datetime(df["Date], errors="ignore", format= "%d.%m.%Y %H:%M:%S" )
剧照和对象
Index: 10001662 entries, 01.01.2016 00:32:09 to 31.12.2015 23:52:02
当我应用带有“raise”的 pd.to_datetime() 时,它不起作用。
你知道我做错了什么吗?
终于明白了。我没有将格式应用于日期。我用过这个:
df["Date"] = pd.to_datetime(df["Date"], errors="coerce", dayfirst=True )
我得到了我想要的,即使数据框中有重复的值。我必须放弃它们。
df = df.reset_index()
df = df.drop_duplicates(keep="first")
一切就绪。
我有一个非常混乱的文件,其中有我需要读取的日期时间并将其用作索引。 (我添加这个是为了澄清它看起来如何我的数据)。我凌乱的文件是日期时间所在的样子:
31.01.2016 13:59:13 31.01.2016 13:59:13 31.01.2016 14:39:20 31.01.2016 14:39:20 31.01.2016 15:19:27 31.01.2016 15:19:27 31.01.2016 15:59:34 31.01.2016 15:59:34 31.01.2016 16:39:41 31.01.2016 16:39:41 31.01.2016 17:19:48 31.01.2016 17:19:48 31.01.2016 17:59:55 31.01.2016 17:59:55 31.01.2016 18:40:02
我读取文件的代码是下一个(真是乱七八糟的文件):
df = pd.melt(pd.read_csv(file, delimiter='\t', skiprows=3, index_col=0, decimal=",").rename(columns={"Unnamed: 1":"Depth [m]"}), id_vars=["Depth [m]"], var_name="Date", value_name="Temperature").set_index("Date"))
我得到的结果是一个 DataFrame。这个 DataFrame 有一列应该转换为 DateTime (Date),之后,我将把它用作索引。当我阅读 DataFrame 并尝试将日期转换为 DateTime 时,它不起作用。在这一步中,日期是一个“对象”。我的数据如下所示:
Date Depth [m] Temperature
0 01.01.2016 00:32:09 0.0 26.59
1 01.01.2016 01:12:16 0.0 26.67
2 01.01.2016 01:52:23 0.0 26.45
3 01.01.2016 02:32:30 0.0 26.41
4 01.01.2016 03:12:37 0.0 26.43
当我应用带有“强制”的 pd.to_datetime() 时,接下来会发生:
df["Date] = pd.to_datetime(df["Date], errors="coerce", format= "%d.%m.%Y %H:%M:%S" )
DatetimeIndex: 10001662 entries, 2016-01-01 00:32:09 to 2015-12-31 23:52:02
这可行,但我在
中得到了很多 NAT 值当我使用“忽略”应用 pd.to_datetime() 并检查接下来发生的 DF 信息时:
df["Date] = pd.to_datetime(df["Date], errors="ignore", format= "%d.%m.%Y %H:%M:%S" )
剧照和对象
Index: 10001662 entries, 01.01.2016 00:32:09 to 31.12.2015 23:52:02
当我应用带有“raise”的 pd.to_datetime() 时,它不起作用。
你知道我做错了什么吗?
终于明白了。我没有将格式应用于日期。我用过这个:
df["Date"] = pd.to_datetime(df["Date"], errors="coerce", dayfirst=True )
我得到了我想要的,即使数据框中有重复的值。我必须放弃它们。
df = df.reset_index()
df = df.drop_duplicates(keep="first")
一切就绪。