Добавление военного времени к дате возвращает ошибку: объект 'int' не поддается изменению - PullRequest
0 голосов
/ 19 апреля 2020

Я не могу добавить военное время к моему datetime64 [нс].

df.head (3):

    year    day military_time   date    test
0   2018    1   5   2018-01-01  20180010005
1   2018    1   10  2018-01-01  20180010010
2   2018    1   15  2018-01-01  20180010015

df.dtypes:

day                                 int64
military_time                       int64
year                                int64
date                       datetime64[ns]
test                                int64
dtype: object

Я анализирую данные из текстовых файлов. Мне удалось создать дату на основе год и день столбцов года.

tmp['date'] = pd.to_datetime(tmp['year'] * 1000 + tmp['day'], format='%Y%j')

Я хотел добавить новый столбец date2 путем добавления военного времени к date , используя тот же подход:

tmp['date2'] = pd.to_datetime((tmp['year'] * 1000 + tmp['day'])*10000 + tmp['military_time'], format='%Y%j%H%M')

Но go ошибка, как показано ниже.

Traceback:

TypeError                                 Traceback (most recent call last)
<ipython-input-93-001f7c6aee03> in <module>()
     14     tmp['date'] = pd.to_datetime(tmp['year'] * 1000 + tmp['day'], format='%Y%j')
     15     tmp['test'] = (tmp['year'] * 1000 + tmp['day'])*10000 + tmp['military_time']
---> 16     tmp['date2'] = pd.to_datetime((tmp['year'] * 1000 + tmp['day'])*10000 + tmp['military_time'], format='%Y%j%H%M')
     17     #tmp['dateTime'] = pd.to_datetime(tmp['test'],format='%Y%j%H%M')
     18     #tmp['test2'] = zfill(tmp['test'],10)

C:\ProgramData\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)
    449         else:
    450             from pandas import Series
--> 451             values = _convert_listlike(arg._values, True, format)
    452             result = Series(values, index=arg.index, name=arg.name)
    453     elif isinstance(arg, (ABCDataFrame, MutableMapping)):

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py in _convert_listlike(arg, box, format, name, tz)
    345                     try:
    346                         result = array_strptime(arg, format, exact=exact,
--> 347                                                 errors=errors)
    348                     except tslib.OutOfBoundsDatetime:
    349                         if errors == 'raise':

pandas\_libs\tslibs\strptime.pyx in pandas._libs.tslibs.strptime.array_strptime()

TypeError: 'int' object is unsliceable

1 Ответ

0 голосов
/ 19 апреля 2020

Согласно этому сайту , запись военного времени может содержать 0000 или 2400 в качестве индикации полуночи. У набора данных, который я использовал, было 2400, поэтому pd.to_datetime не смог правильно проанализировать мое время. Я заменил его с помощью tmp['military_time'].replace({2400: 0}, inplace=True), а затем смог правильно проанализировать его, используя tmp['date2'] = pd.to_datetime((tmp['year'] * 1000 + tmp['day'])*10000 + tmp['military_time'], format='%Y%j%H%M')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...