首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大熊猫格式问题分类时间

大熊猫格式问题分类时间
EN

Stack Overflow用户
提问于 2020-11-03 22:05:34
回答 1查看 101关注 0票数 0

我试图把小时转换成分类格式,列是这样的,有几百个条目。

代码语言:javascript
复制
hr_animals

21:25:00
10:36:00
23:17:00
01:23:00
NA
13:30:00
NA

我想要这样的输出:

代码语言:javascript
复制
hr_animals

Night
Morning
Night
Dawn
NA
Afternoon
NA

我使用这段代码对时间进行分类:

代码语言:javascript
复制
pamdf ['part_of_day'] = (pamdf['hr_animals'].dt.hour % 24 + 4) // 4
pamdf['part_of_day'].replace({1: 'Dawn',
                      2: 'Early Morning',
                      3: 'Morning',
                      4: 'Noon',
                      5: 'Evening',
                      6: 'Night'}, inplace=True)
pamdf.head()

但我一直有这样的错误:

AttributeError: Can only use .dt accessor with datetimelike values

好吧,我明白了。格式是错误的。在我检查时,列的格式是一个对象:

代码语言:javascript
复制
pamdf['hr_animals'].describe()

count          139
unique         133
top       01:43:00
freq             2
Name: hr_animals, dtype: object

但是每次我试图转换它时,我都会发现一个新的错误:

第1次。

代码语言:javascript
复制
pamdf['hr_animals'] =  pd.to_datetime(pamdf['hr_animals']

SyntaxError: unexpected EOF while parsing (<ipython-input-33-6d6f40bdc27d>, line 2) 
  File "<ipython-input-33-6d6f40bdc27d>", line 2
    pamdf['hr_animals'] =  pd.to_datetime(pamdf['hr_animals']
                                                           ^
SyntaxError: unexpected EOF while parsing

第二次

代码语言:javascript
复制
pamdf['hr_animals'] = pamdf['hr_animals'].astype('datetime64[ns]')


TypeError: <class 'datetime.time'> is not convertible to datetime

第3次

代码语言:javascript
复制
pamdf['hr_animals'] = pd.to_datetime(pamdf['hr_animals'], format='%H:%M').dt.hour

ValueError: unconverted data remains: :00 

事实上,我只想改变时间。日期在另一列中。下面是用于帮助理解的数据集的打印。

我该怎么做呢?

提前谢了,我真的摔碎了头

--编辑--编辑

通过使用所给出的答案,我得到了以下信息:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-03 22:34:00

这可能是因为您的数据不是datetime类型,所以不能使用.dt访问。要修复代码,第三个选项应该是:

代码语言:javascript
复制
pd.to_datetime(pamdf['hr_animals'], format='%H:%M:%S', errors='coerce').dt.hour

也就是说,您的格式更适合于timedelta而不是DateTime。尝试:

代码语言:javascript
复制
df['hr_animals'] = ((pd.to_timedelta(df['hr_animals'], errors='coerce')
                      // pd.Timedelta('4H') )
                      .add(1)
                      .replace({1: 'Dawn',
                      2: 'Early Morning',
                      3: 'Morning',
                      4: 'Noon',
                      5: 'Evening',
                      6: 'Night'})
                   )

输出:

代码语言:javascript
复制
  hr_animals
0      Night
1    Morning
2      Night
3       Dawn
4        NaN
5       Noon
6        NaN

另一个选项是使用pd.cut,它返回一个分类列。这可能会有帮助,因为标签将被订购,即Dawn < Early Morning<...

代码语言:javascript
复制
df['hr_animals'] = pd.cut(pd.to_timedelta(df['hr_animals'], errors='coerce'),
                          bins = pd.to_timedelta(np.arange(0,25,4), unit='H'),
                          labels=['Dawn','Early Morning', 'Morning', 
                                  'Noon', 'Evening', 'Night']
                   )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64671385

复制
相关文章

相似问题

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