Измените дату и время на однозначный час, заканчивающийся для кадра данных в Python - PullRequest
0 голосов
/ 25 октября 2018

У меня есть файл CSV, в котором есть столбец со значениями, такими как:

10/23/2018 11:00:00 PM

Я хочу преобразовать эти значения строго по времени и создать новый столбец, который занимает время записи (11:00:00 и т. д.) и изменяет ее на время окончания часа.

Пример выглядит следующим образом:

11:00:00 PM to 12:00:00 AM = 24,  12:00:00 AM to 1:00:00 AM = 1, 1:00:00 AM to 2:00:00 AM = 2 .....etc

Ищем простой способ вычисления их путем индексации ихосновываясь на этом преобразовании.

Моя первая идея псевдокода - сделать что-то вроде захвата столбца df ['Date'] и выяснить, сколько времени:

file = pd.read_csv()
def conv(n):
    date_time = n.iloc[1,1]  #Position of the date-time column in file
    for i in date_time:
        time = date_time[11:] #Point of the line where time begins

Не знаете, какпродолжить.

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Это лучший способ сделать это:

from datetime import timedelta
import pandas as pd

file = pd.read_csv()

Случай первый: если вы хотите сохранить дату

file['New datetime'] = file['Date_time'].apply(lambda x: pd.to_datetime(x) + timedelta(hours = 1))

Случай два: Если вы просто хотите время

file['New time'] = file['Date_time'].apply(lambda x: (pd.to_datetime(x) + timedelta(hours = 1)).time())

Если вам нужен тип данных столбца в виде строки вместо метки времени, вы можете просто сделать:

file['New time'] = file['New time'].astype(str) 

Чтобы преобразовать его в читаемую строку.

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

0 голосов
/ 25 октября 2018

Вы также можете сделать это:

import pandas as pd

data ='''
10/23/2018 11:00:00 PM
10/23/2018 12:00:00 AM
'''.strip().split('\n')

df = pd.DataFrame(data, columns=['date'])

df['date'] = pd.to_datetime(df['date'])

#df['pad1hour'] = df['date'].dt.hour+1
#or
df['pad1hour'] = df['date'] + pd.Timedelta('1 hours')

# I prefer the second as you can add whatever interval e.g. '1 days 3 minutes'



print(df['pad1hour'].dt.time)
0 голосов
/ 25 октября 2018

Вы должны преобразовать в datetime с pd.to_datetime(df.your_col) (ваш формат будет автоматически проанализирован правильно, хотя вы можете указать его для повышения скорости), а затем вы можете использовать аксессор .dt.hour.

import pandas as pd
# Sample Data
df = pd.DataFrame({'date': pd.date_range('2018-01-01', '2018-01-03', freq='30min')})

df['hour'] = df.date.dt.hour+1
print(df.sample(20))

                  date  hour
95 2018-01-02 23:30:00    24
66 2018-01-02 09:00:00    10
82 2018-01-02 17:00:00    18
80 2018-01-02 16:00:00    17
75 2018-01-02 13:30:00    14
83 2018-01-02 17:30:00    18
49 2018-01-02 00:30:00     1
47 2018-01-01 23:30:00    24
30 2018-01-01 15:00:00    16
52 2018-01-02 02:00:00     3
29 2018-01-01 14:30:00    15
86 2018-01-02 19:00:00    20
59 2018-01-02 05:30:00     6
65 2018-01-02 08:30:00     9
92 2018-01-02 22:00:00    23
8  2018-01-01 04:00:00     5
91 2018-01-02 21:30:00    22
10 2018-01-01 05:00:00     6
89 2018-01-02 20:30:00    21
51 2018-01-02 01:30:00     2
...