我将整年的每小时数据存储在对象dtype的Pandas列中。数据是从具有以下结构的.CSV文件中导入的:
Date/Time,kWh
01/01 01:00:00,1.14168620105289
01/01 02:00:00,0.998495769210657
01/01 03:00:00,0.949679309420898
01/01 04:00:00,0.938080118507197
01/29 20:00:00,1.14161727165962
01/29 21:00:00,1.01263083086978
01/29 22:00:00,0.961652730472469
01/29 23:00:00,0.951211299856564
01/29 24:00:00,0.949390070561629
因此,“日期/时间”列包括月,日,小时,分钟和秒。我正在尝试(1)将该列转换为DateTime,并(2)将年份设置为2019。
我遇到了转换问题,因为出于某些奇怪的原因,而不是正常的24小时范围00:00至23:59,对.CSV文件进行编码的小组选择的时间范围为01: 00至24:00。因此,当我运行以下命令时:
cons['Date/Time'] = pandas.to_datetime(cons['Date/Time'], format=' %m/%d %H:%M:%S')
我收到以下错误:
ValueError: time data ' 01/01 24:00:00' does not match format ' %m/%d %H:%M:%S' (match)
我正在寻求将列转换为DateTime并将数据的年份设置为2019的帮助。希望能提供任何帮助。
答案 0 :(得分:0)
简短的回答:我做了一些字符串操作以将所有时间减少一小时
df['temp_col'] = df['Date/Time,kWh'].str.split(':').str[0]
df['temp_col'] = (pd.to_numeric(df['temp_col']) - 1).astype(str)
df['temp_col'] = df['temp_col'].apply(lambda x: f'0{x}' if len(x)==1 else x)
df['temp_col'] = df['temp_col'] + df['Date/Time,kWh'].str[2:]
下面的输出并不干净,因为您发布的数据不能很好地通过pd.read_clipboard()复制,但是应该可以给您一个思路。
Date/Time,kWh temp_col
01/01 01:00:00,1.14168620105289 00:00:00,1.14168620105289
01/01 02:00:00,0.998495769210657 01:00:00,0.998495769210657
01/01 03:00:00,0.949679309420898 02:00:00,0.949679309420898
更多详细信息::我将字符串的第一部分记为小时,并创建了一个将其转换为整数并减去1的列。然后,将字符串的其余部分添加到其中。根据您的问题,这将是将小时数设置为0-23(而不是1-24)的一种方法。听起来一切都比“应该晚了一个小时?”。否则,如果您只是想使24:00 = 00:00(不确定哪种方法对您的数据正确),则@dzakyputra对此发表了评论。您还可以进行类似的字符串操作以使24:00到00:000,因此希望这可以帮助您解决。
如果您想使其成为一种“单线”,则最好将其分解为多个步骤。
df['Date/Time,kWh'] = (pd.to_numeric(df['Date/Time,kWh'].str.split(':').str[0])-1).astype(str).apply(lambda x: f'0{x}' if len(x)==1 else x) + df['Date/Time,kWh'].str[2:]
输出:
Date/Time,kWh
01/01 00:00:00,1.14168620105289
01/01 01:00:00,0.998495769210657
01/01 02:00:00,0.949679309420898