我有一个timestamp
列,其中的时间戳格式如下
2016-06-16T21:35:17.098+01:00
我想从中提取日期和时间。我做了以下工作:
import datetime as dt
df['timestamp'] = df['timestamp'].apply(lambda x : pd.to_datetime(str(x)))
df['dates'] = df['timestamp'].dt.date
这一招奏效了一段时间。但突然间就没有了。
如果我再次执行df['dates'] = df['timestamp'].dt.date
,我会得到以下错误
Can only use .dt accessor with datetimelike values
幸运的是,我已将数据框保存为csv中的dates
,但现在我想以23:00:00.051
创建另一列time
- 编辑**
从原始数据文件(1500万个样本)中,timestamp
列如下所示(前5个样本):
timestamp
0 2016-06-13T00:00:00.051+01:00
1 2016-06-13T00:00:00.718+01:00
2 2016-06-13T00:00:00.985+01:00
3 2016-06-13T00:00:02.431+01:00
4 2016-06-13T00:00:02.737+01:00
执行以下命令后
df['timestamp'] = df['timestamp'].apply(lambda x : pd.to_datetime(str(x)))
timestamp
列看起来类似于dtype
作为dtype:datetime64 [ns]
0 2016-06-12 23:00:00.051
1 2016-06-12 23:00:00.718
2 2016-06-12 23:00:00.985
3 2016-06-12 23:00:02.431
4 2016-06-12 23:00:02.737
最后
df['dates'] = df['timestamp'].dt.date
0 2016-06-12
1 2016-06-12
2 2016-06-12
3 2016-06-12
4 2016-06-12
- 编辑2**
发现了错误。我已经清理了数据并将 Dataframe 保存在csv文件中,所以我不必再次进行清理。当我读取csv时,时间戳dtype
变为object。现在我该怎么解决这个问题?
4条答案
按热度按时间9gm1akwq1#
首先执行以下操作:
在你像往常一样进行提取之前:
vuv7lop32#
如果日期是字符串形式,则:
如果对象已经是Timestamp格式,则跳过第一行代码。
%Y-%m-%d %H:%M
这意味着你的timestamp对象必须是2016-05-16 12:35:00
这样的形式。pengsaosao3#
你可以使用pandas内置的
to_datetime
对象来实现cetgtptt4#
导入csv时,请使用
pandas.read_csv()
的parse_dates
参数。例如,要导入列utc_datetime
作为datetime:要从timestamp提取日期,请使用numpy代替pandas:
Numpy datetime操作比pandas datetime操作快得多。