我试图把小时转换成分类格式,列是这样的,有几百个条目。
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第3次
pamdf['hr_animals'] = pd.to_datetime(pamdf['hr_animals'], format='%H:%M').dt.hour
ValueError: unconverted data remains: :00 事实上,我只想改变时间。日期在另一列中。下面是用于帮助理解的数据集的打印。
我该怎么做呢?
提前谢了,我真的摔碎了头
--编辑--编辑
通过使用所给出的答案,我得到了以下信息:

发布于 2020-11-03 22:34:00
这可能是因为您的数据不是datetime类型,所以不能使用.dt访问。要修复代码,第三个选项应该是:
pd.to_datetime(pamdf['hr_animals'], format='%H:%M:%S', errors='coerce').dt.hour也就是说,您的格式更适合于timedelta而不是DateTime。尝试:
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'})
)输出:
hr_animals
0 Night
1 Morning
2 Night
3 Dawn
4 NaN
5 Noon
6 NaN另一个选项是使用pd.cut,它返回一个分类列。这可能会有帮助,因为标签将被订购,即Dawn < Early Morning<...
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']
)https://stackoverflow.com/questions/64671385
复制相似问题