У меня есть столбец TimeDelta со значениями, которые выглядят так:
2 дня 21:54:00.000000000
Я хотел бы иметь число с плавающей запятой, представляющее количество дней, скажем, здесь 2 + 21/24 = 2,875, без учета минут. Есть ли простой способ сделать это? Я видел ответ, предлагающий
res['Ecart_lacher_collecte'].apply(lambda x: float(x.item().days+x.item().hours/24.))
Но я получаю «AttributeError: объект« str »не имеет атрибута« элемент »»
Версия Numpy — «1.10.4», версия Pandas — u «0.17.1».
Первоначально столбцы были получены с помощью:
lac['DateHeureLacher'] = pd.to_datetime(lac['Date lacher']+' '+lac['Heure lacher'],format='%d/%m/%Y %H:%M:%S')
cap['DateCollecte'] = pd.to_datetime(cap['Date de collecte']+' '+cap['Heure de collecte'],format='%d/%m/%Y %H:%M:%S')
в первом скрипте. Затем во втором:
res = pd.merge(lac, cap, how='inner', on=['Loc'])
res['DateHeureLacher'] = pd.to_datetime(res['DateHeureLacher'],format='%Y-%m-%d %H:%M:%S')
res['DateCollecte'] = pd.to_datetime(res['DateCollecte'],format='%Y-%m-%d %H:%M:%S')
res['Ecart_lacher_collecte'] = res['DateCollecte'] - res['DateHeureLacher']
Может быть, сохранив его в csv, верните их типы обратно в строку? Преобразование, которое я пытаюсь сделать, находится в третьем сценарии.
Sexe_x PiegeLacher latL longL Loc Col_x DateHeureLacher Nb envolees PiegeCapture latC longC Col_y Sexe_y Effectif DateCollecte DatePose Ecart_lacher_collecte Dist_m
M Q0-002 1629238 237877 H Rouge 2011-02-04 17:15:00 928 Q0-002 1629238 237877 Rouge M 1 2011-02-07 15:09:00 2011-02-07 12:14:00 2 days 21:54:00.000000000 0
M Q0-002 1629238 237877 H Rouge 2011-02-04 17:15:00 928 Q0-002 1629238 237877 Rouge M 4 2011-02-07 12:14:00 2011-02-07 09:42:00 2 days 18:59:00.000000000 0
M Q0-002 1629238 237877 H Rouge 2011-02-04 17:15:00 928 Q0-003 1629244 237950 Rouge M 1 2011-02-07 15:10:00 2011-02-07 12:16:00 2 days 21:55:00.000000000 75
рез.информация():
Sexe_x 922 non-null object
PiegeLacher 922 non-null object
latL 922 non-null int64
longL 922 non-null int64
Loc 922 non-null object
Col_x 922 non-null object
DateHeureLacher 922 non-null object
Nb envolees 922 non-null int64
PiegeCapture 922 non-null object
latC 922 non-null int64
longC 922 non-null int64
Col_y 922 non-null object
Sexe_y 922 non-null object
Effectif 922 non-null int64
DateCollecte 922 non-null object
DatePose 922 non-null object
Ecart_lacher_collecte 922 non-null object
Dist_m 922 non-null int64
float(res['columnName'].dt.days + res['columnName'].dt.hours / 24)
- person Anton Protopopov   schedule 19.02.2016res['columnname'].dt.total_seconds()/ (24 * 60 * 60)
- person EdChum   schedule 19.02.2016datetime
. Вы могли бы сделать это сpd.to_datetime
- person Anton Protopopov   schedule 19.02.2016res.info()
, также работает лиres['Ecart_lacher_collecte'].dt.total_seconds()/ (24 * 60 * 60)
? - person EdChum   schedule 19.02.2016pd.to_datetime(res['DateHeureLacher'],format='%Y-%m-%d %H:%M:%S', errors='coerce')
, также вам нужно опубликовать минимальные данные и код, который мы можем запустить, который воспроизводит вашу ошибку, поскольку это должно работать, также когда вы читаете csv и устанавливаетеparse_dates=['DateHeureLacher', 'DateCollecte']
вread_csv
делает исправитьdtypes
? - person EdChum   schedule 19.02.2016read_csv
, чтобы проанализировать его обратно как timedelta64, поэтому у вас есть пара вариантов: преобразовать timedelta64 вint64
с помощьюastype
, а затем при чтении обратно использовать пользовательский конвертер чтобы преобразовать его или после прочтения обратно, вы можете сделатьastype(np.timedelta64)
, и это сработает - person EdChum   schedule 19.02.2016