繁体   English   中英

删除时间分钟 object python

[英]Delete time minutes from time object python

我在 pandas dataframe 中有一个字段,我想从中截断分钟,即将时间转换为字符串,拆分它并仅保留小时。

The time field in my dataframe is of type object and what I have tried to do is as below (accidents is my pandas dataframe by the way):

for row in range (1, len(accidents)):

    hour = row['Time'].strftime("%H").split(":", 1)[0]

例如,我想做的是将 17:45 更改为 17。

事故图像 Dataframe 如下。

在此处输入图像描述

Time object 的数据类型如下。

在此处输入图像描述

当我运行上述代码时,出现错误“TypeError: 'int' object is not subscriptable”

我知道这是某种形式的铸造错误,但我不知道如何解决它。 (我对 Python 很陌生)。

如果需要,可以重新生成 csv 文件(此处截断以仅包含相关字段)。 Accident_Index,Location_Easting_OSGR,Location_Northing_OSGR,经度,纬度,Police_Force,Accident_Severity,Number_of_Vehicles,Number_of_Casualties,日期,Day_of_Week,时间, 200501BS00001,525680,178240,-0.191170,51.4,380096,1/201,1/20,04/ ,17:42

datetime模块的strftime()需要有一个格式参数(请参阅下面的正确用法)。

>>> datetime.now().strftime("%m/%d/%Y, %H:%M:%S")
'08/09/2020, 02:48:25'

这里有一个好的strftime()备忘单)

在您的情况下,您似乎只是想获取小时数。 为此,您应该使用以下格式字符串来获取小时: "%H" 如果您需要将其作为 integer (如果您需要用它进行数学运算),您可以简单地用int()包围它。 如果您只想显示此数字,则可以将其保留为字符串。 strftime()默认返回一个字符串。

试试这个代码:

hour = int(row['Time'].strftime("%H"))

您可以使用时间列的hour属性

d = [d for d in pd.date_range(dt.datetime(2020,5,1,2), 
                          dt.datetime(2020,5,3,4), freq="45min") 
     ] # miss some sample times... 

# random manipulation of rawIdx so there are some rows where ts is not in rawIdx
df = pd.DataFrame({"Time":d, 
                   "val":[random.randint(0,50) for x in d]})

df["Hour"] = df["Time"].dt.hour
print(df.head().to_string(index=False))

output

               Time  val  Hour
2020-05-01 02:00:00   39     2
2020-05-01 02:45:00   23     2
2020-05-01 03:30:00    9     3
2020-05-01 04:15:00   25     4
2020-05-01 05:00:00   41     5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM