在Python中将dataframe的日期时间更改为以一位数小时结尾

在Python中将dataframe的日期时间更改为以一位数小时结尾,python,python-3.x,pandas,dataframe,type-conversion,Python,Python 3.x,Pandas,Dataframe,Type Conversion,我有一个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 正在寻找一种简单的方法,通过基于此转换对它们进行索引来计算它们

我有一个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

不确定如何继续。

您应该使用
pd.to\u datetime(df.u col)
转换为
datetime
(您的格式将自动正确解析,尽管您可以指定它以提高速度),然后您可以使用
.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

这是最好的方法:

from datetime import timedelta
import pandas as pd

file = pd.read_csv()
案例一:如果你想保留日期 案例二:如果你只是想要时间 如果需要将列的数据类型作为字符串而不是时间戳,则只需执行以下操作:

file['New time'] = file['New time'].astype(str) 
将其转换为可读字符串

希望有帮助。

您也可以这样做:

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)

那么,您是否正在尝试执行
file.apply(conv)
?我想我知道你想做什么,但我不确定输入的格式。此外,是日期列
datetime.datetime
中的项目类型,还是字符串?输入格式如上所示。每个日期看起来像2018年10月23日晚上11:00:00。。。。它们都是当前默认的对象类型。左侧的箱子是否关闭?[11:00:00 PM至12:00:00 AM)=24,[12:00:00 AM至1:00:00 AM)=1当我创建类似以下内容时:
df['Hour']=pd.to_datetime(df['date'])
后跟
df['Hour Ending'].date.dt.hour+1
我得到“Series对象没有属性”date“错误。@HelloToEarth这是因为您创建了一个名为
hour
的列,所以没有名为
date
的列(注意,我使用的是引用列的
.col\u name
方法)因此正确的参考值应该是
df.Hour.dt.Hour+1
,或等效的
df['Hour'].dt.hour+1
很高兴它能帮上忙!我知道它可能会与所有类似名称的访问器和带有
符号的列名混淆。有时我尝试使用它,但得到了一个0小时。我似乎无法摆脱它,因为我想要一个1-24小时的系统,这给了我0-23。哦!然后将它更改为方法优先方法:df['pad1hour']=df['date'].dt.hour+1和print(df['pad1hour'])似乎不起作用。给我一个
value错误:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
有没有办法格式化
df['pad1hour']=df['date']+pd.Timedelta('1小时)吗
method?它适用于格式,但只需要调整。能否显示df['date']的示例值及其数据类型?
file['New time'] = file['New time'].astype(str) 
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)