将日期时间更改为一位数小时,以Python中的数据帧结尾

时间:2018-10-25 17:14:29

标签: python python-3.x pandas dataframe type-conversion

我有一个CSV文件,该文件的列的值如下:

10/23/2018 11:00:00 PM

我想严格按时间转换这些值,并创建一个新列,该列采用条目的 time (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 :(得分:1)

您应将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

答案 1 :(得分:1)

您也可以这样做:

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)

答案 2 :(得分:0)

这是最好的方法:

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) 

将其转换为可读的字符串。

希望有帮助。