Как изменить дату в столбце datetime панд? - PullRequest
0 голосов
/ 07 октября 2019

Я пытался изменить дату столбца панд со временем, имеющим секунды в формате с плавающей точкой, чтобы установить определенную дату. Но я не смог заставить его работать.

Моя попытка до сих пор:

import numpy as np
import pandas as pd

df = pd.DataFrame({'time': [1.0,2.0,3.0,60.0,120.1,120.2]})


df['date'] = '2013-09-01 00:00:' + df['time'].astype(str)
df['date2'] = pd.to_datetime(df['date'],format='%Y-%m-%d %H:%M%-S') # this fails

df

Ссылка: http://strftime.org/

Я не смог найти формат строки длямое время. Как решить проблему. Я благодарен за помощь.

Вопрос

По умолчанию pandas дает 1 января 1970 года в качестве даты, как сделать это 1 сентября 2013 года?

update

Iтоже попробовал это

df['date'] = pd.to_datetime(df['time'], unit='s')
df['date2'] = pd.to_datetime('2013-09-01')
df['date3'] = df['date'].dt + df['date2'].dt

все равно не повезло.

Ответы [ 3 ]

2 голосов
/ 07 октября 2019

Используйте прямую to_timedelta для добавления с to_datetime

pd.to_datetime('2013-09-01') + pd.to_timedelta(df.time, unit='s')

Out[19]:
0   2013-09-01 00:00:01.000
1   2013-09-01 00:00:02.000
2   2013-09-01 00:00:03.000
3   2013-09-01 00:01:00.000
4   2013-09-01 00:02:00.100
5   2013-09-01 00:02:00.200
Name: time, dtype: datetime64[ns]
1 голос
/ 07 октября 2019

Вы можете использовать панды Timedelta для этого:

import numpy as np
import pandas as pd

df = pd.DataFrame({'time': [1.0,2.0,3.0,60.0,120.1,120.2]})


df['date'] = pd.to_datetime('2013-09-01') + pd.Series([pd.Timedelta(t, unit='s') for t in df['time']])

print(df)

Вывод:

    time                    date
0    1.0 2013-09-01 00:00:01.000
1    2.0 2013-09-01 00:00:02.000
2    3.0 2013-09-01 00:00:03.000
3   60.0 2013-09-01 00:01:00.000
4  120.1 2013-09-01 00:02:00.100
5  120.2 2013-09-01 00:02:00.200

Для получения дополнительной ссылки посетите: https://pandas.pydata.org/pandas-docs/stable/user_guide/timedeltas.html

1 голос
/ 07 октября 2019

Учитывая ваши данные, вы должны сначала создать столбец date и проанализировать его как дату по умолчанию, а затем найти дельту.

Вы можете использовать библиотеку Python datetime для этой работы:

import numpy as np
import pandas as pd
from datetime import datetime, timedelta

df = pd.DataFrame({'time': [1.0,2.0,3.0,60.0,120.1,120.2]})
df['date'] = datetime.strptime('2013-09-01 00:00:00', '%Y-%m-%d %H:%M:%S')
df['date2'] = df.apply(lambda row: row.date - timedelta(seconds=row.time), axis=1)

Надеюсь, это поможет.

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