【发布时间】:2020-11-03 22:05:34
【问题描述】:
我正在尝试将小时数转换为分类格式, 该列是这样的,有数百个条目。
hr_animals
21:25:00
10:36:00
23:17:00
01:23:00
NA
13:30:00
NA
我想要这样的输出:
hr_animals
Night
Morning
Night
Dawn
NA
Afternoon
NA
我用这段代码来分类时间:
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
好的,我明白了。格式不对。当我检查列的格式是一个对象:
pamdf['hr_animals'].describe()
count 139
unique 133
top 01:43:00
freq 2
Name: hr_animals, dtype: object
但是每次我尝试转换它时,我都会收到一个新错误:
第 1 个。
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
第二个
pamdf['hr_animals'] = pamdf['hr_animals'].astype('datetime64[ns]')
TypeError: <class 'datetime.time'> is not convertible to datetime
第三
pamdf['hr_animals'] = pd.to_datetime(pamdf['hr_animals'], format='%H:%M').dt.hour
ValueError: unconverted data remains: :00
事实是我只想转换小时。日期在另一列中。 这是数据集的打印以帮助理解。
我该怎么做?
提前谢谢,我真的很头疼
-----编辑---
通过使用给出的答案,我得到了这个:
【问题讨论】:
-
pd.to_datetime(pamdf['hr_animals'], format='%H:%M:%S', errors='coerce').dt.hour不会更改您的列。您需要分配回pamd['hr_animals'] = pd.to_datetime(...)。但话又说回来,尽可能避免apply。 -
range(24,6)为空。查看您的嵌套if .. elif。它可以是if x <=6: return 'Dawn' elif x<=12: return 'Morning'。无论如何,这又是一个非常糟糕的主意:-)。 -
是的!但是我尝试了答案并得到了所有“NaN”并且该函数整晚都返回。在十字架和剑之间,一无所获嘿嘿嘿。事实上,非常感谢您如此努力地提供帮助!