【发布时间】:2019-06-01 08:48:07
【问题描述】:
我有一个 flight.csv 数据库,其中包含在特定机场起飞和降落的航班以及与每个飞行步骤相关的时间,即起飞、离地轮子、地上轮子、到达、实际到达和离开等。
现在我想将数据库中给定的时间转换为 24 小时格式的浮点数 例如:13:45 是 1345.0 00:02 是 0002.0
其中两列(Scheduled_departure 和 Scheduledarrival)是整数,所以我很容易通过以下方式将它们转换为时间:
flights['SCHEDULED_DEPARTURE'] = flights['SCHEDULED_DEPARTURE'].apply(lambda x: '{0:0>4}'.format(x))
(在时间数字前加零)
flights['SCHEDULED_DEPARTURE'] = pd.to_datetime(flights['SCHEDULED_DEPARTURE'],format= '%H%M').dt.time
(用于实际转换`
但由于其他列是浮点数,我不能直接使用 astype() 因为它会为小数创建错误。
所以我试图绕过我的方式:
pd.to_numeric(flights.DEPARTURE_TIME, downcast = 'integer')
(去掉小数)
flights.DEPARTURE_TIME = flights.DEPARTURE_TIME.astype(dtype='int32')
(为了下一步的冗余)
flights['DEPARTURE_TIME'] = flights['DEPARTURE_TIME'].apply(lambda x: '{0:0>4}'.format(x))
(在数字前添加零)
flights['DEPARTURE_TIME'] = pd.to_datetime(flights['DEPARTURE_TIME'],format= '%H%M').dt.time
(用于实际时间转换)
但是经过这一步,却输出错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py in _convert_listlike_datetimes(arg, box, format, name, tz, unit, errors, infer_datetime_format, dayfirst, yearfirst, exact)
290 try:
--> 291 values, tz = conversion.datetime_to_datetime64(arg)
292 return DatetimeIndex._simple_new(values, name=name, tz=tz)
pandas/_libs/tslibs/conversion.pyx in
pandas._libs.tslibs.conversion.datetime_to_datetime64()
TypeError: Unrecognized value type: <class 'str'>
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-23-a3defb9ecd52> in <module>
----> 1 flights['DEPARTURE_TIME'] =
pd.to_datetime(flights['DEPARTURE_TIME'],format= '%H%M').dt.time
~\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py in
to_datetime(arg, errors, dayfirst, yearfirst, utc, box, format, exact,
unit, infer_datetime_format, origin, cache)
590 else:
591 from pandas import Series
--> 592 values = convert_listlike(arg._values, True, format)
593 result = Series(values, index=arg.index, name=arg.name)
594 elif isinstance(arg, (ABCDataFrame, compat.MutableMapping)):
~\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py in
_convert_listlike_datetimes(arg, box, format, name, tz, unit, errors,
infer_datetime_format, dayfirst, yearfirst, exact)
292 return DatetimeIndex._simple_new(values, name=name, tz=tz)
293 except (ValueError, TypeError):
--> 294 raise e
295
296 if result is None:
~\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py in
_convert_listlike_datetimes(arg, box, format, name, tz, unit, errors,
infer_datetime_format, dayfirst, yearfirst, exact)
259 try:
260 result, timezones = array_strptime(
--> 261 arg, format, exact=exact, errors=errors)
262 if '%Z' in format or '%z' in format:
263 return _return_parsed_timezone_results(
pandas/_libs/tslibs/strptime.pyx in
pandas._libs.tslibs.strptime.array_strptime()
ValueError: unconverted data remains: 0
帮我把那些浮点数转换成时间。
我无法直接转换整数,因为日期时间需要正确的格式,包括零。
DEPARTURE_TIME 的预期版本如下所示:
0 08:00:00
1 08:30:00
2 19:10:00
3 15:15:00
4 14:27:00
Name: SCHEDULED_DEPARTURE, dtype: object
【问题讨论】:
-
能否在转换为时间之前显示
SCHEDULED_DEPARTURE行示例? -
标签: python pandas datetime jupyter