我正在使用pandas将包含日期和时间的列转换为秒,使用的代码如下:
df['date_time'] = pd.to_timedelta(df['date_time'])df['date_time'] = df['date_time'].dt.total_seconds()
如果我使用以下代码:
df['date_time'] = pd.to_datetime(df['date_time'], errors='coerce')df['date_time'] = df['date_time'].dt.total_seconds()print(df.head())
那么我会得到以下错误:
AttributeError: 'DatetimeProperties' object has no attribute 'total_seconds'
对于dt.timestamp
也是如此
所以我的问题是:
-
在训练模型时是否有必要将时间转换为秒?如果是,为什么以及如何做?如果不是,为什么不需要?
-
这个问题涉及到另外两个名为weather_m和weather_d的列,其中weather_m有38种不同的条目,或者说38个不同的类别,其中一次只会有一个为真,而weather_d有11个,但情况与weather_m相同。所以我在这里有点困惑,是否应该拆分这些分类数据,并在原始数据集中合并49个新列,然后删除weather_m和weather_d来训练模型,还是使用LabelEncoder而不是pd.get_dummies?
回答:
-
将日期时间或时间戳转换为时间间隔(持续时间)没有意义。只有当你想计算给定时间戳与某个参考日期之间的持续时间时才有意义。你可以通过使用
-
来获取两个日期之间的差异来获得时间间隔。由于你的日期时间列是字符串,你还需要先将其转换为日期时间:df['date_time'] = pd.to_datetime(df['date_time'], format='%m/%d/%Y %H:%M')
。然后你可以尝试这样做:ref_date = datetime.datetime(1970, 1, 1, 0, 0); df['secs_since_epoch'] = (df['date_time'] - ref_date).dt.total_seconds()
-
如果不同的类别完全不同(并且它们之间没有隐式的排序),那么你应该使用独热编码,是的,替换原始列。由于类别的数量较少,这应该没问题。(不过这也取决于你将在这个数据上运行什么。有些库可能对原始的分类列没问题,并且会为你隐式地进行转换)