首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas:修复datetime.time和datetime.datetime的混合

问Pandas:修复datetime.time和datetime.datetime的混合
EN

Stack Overflow用户
提问于 2019-04-17 09:22:15
回答 1查看 403关注 0票数 0

我有以下DataFrame,其中'Time‘列具有混合的datetime类型:

代码语言:javascript
复制
time_series_slice = tmp_df['XXX']
time_series_slice['Time types'] = time_series_slice['Time'].apply(lambda row: type(row))
time_series_slice['Time types'].value_counts()

<class 'datetime.datetime'>    97367
<class 'datetime.time'>           25
Name: Time types, dtype: int64

我在使用pd.to_datetime()方法将整个'Time‘列转换为Pandas datetime时遇到问题,原因是:

代码语言:javascript
复制
TypeError: <class 'datetime.time'> is not convertible to datetime

处理时间序列切片‘time’.apply(lambda x: pd.Timestamp(x))也不起作用:

代码语言:javascript
复制
TypeError: Cannot convert input [00:00:00] of type <class 'datetime.time'> to Timestamp

我认为这25个愚蠢的行让我头疼,但我不知道该怎么处理它们。

首先,如何强制Pandas只显示这些行?time_series_slice[isinstance(time_series_slice'Time',datetime.time)]给了我:

代码语言:javascript
复制
NameError: name 'datetime' is not defined

其次,如何将所有这些值转换为Pandas datetime并继续?:(

更新:

添加示例数据视图:

代码语言:javascript
复制
0    2017-02-08 22:19:08.618000
1    2017-02-08 22:19:12.187000
2    2017-02-08 22:19:13.481000
3    2017-02-08 22:19:16.330000
4    2017-02-08 22:19:16.582000
Name: Time, dtype: object

更新2:多亏了文本的建议,我已经过滤掉了datetime.time行,它们看起来是这样的:

代码语言:javascript
复制
time_series_slice['Time types'] = time_series_slice['Time'].apply(lambda row: type(row).__name__)
time_series_slice[time_series_slice['Time types'] == 'time']['Time']

96367    00:00:00
96368    00:00:00
96464    00:00:00
96465    00:00:00
96466    00:00:00
96467    00:00:00
96593    00:00:00
96862    00:00:00
Name: Time, dtype: object

最简单的方法是将它们重写为全为0的datetime.datetime对象吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-17 09:29:44

如果您想对这5行进行切片

代码语言:javascript
复制
time_series_slice['Time types'] = time_series_slice['Time'].apply(lambda x : type(x).__name__)=='Timestamp'

time_series_slice['Time types'].value_counts()

time_series_slice[time_series_slice['Time types']=='datetime.time']

然后

我们使用to_datetime来转换

代码语言:javascript
复制
time_series_slice['Time']=pd.to_datetime(time_series_slice['Time'].astype(str))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55718601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档