Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拆分日期时间、python、pandas_Python_Pandas_Datetime_Time Series - Fatal编程技术网

拆分日期时间、python、pandas

拆分日期时间、python、pandas,python,pandas,datetime,time-series,Python,Pandas,Datetime,Time Series,很抱歉,我对stackoverflow的问题不太熟悉,所以我不知道如何正确格式化 所以我得到了一个包含datetime列的Pandas数据框,该列包含日期和时间,以及一个包含某种值的关联列。给定的日期和时间按小时递增。我希望操纵数据帧,使其每15分钟递增一次,但保留相同的值。我该怎么做?谢谢 我试过: df=df.asfreq('15Min',方法='ffill') 但我有一个错误: “TypeError:无法将类型'Timestamp'与类型'long'进行比较” 当前数据帧: datetim

很抱歉,我对stackoverflow的问题不太熟悉,所以我不知道如何正确格式化

所以我得到了一个包含datetime列的Pandas数据框,该列包含日期和时间,以及一个包含某种值的关联列。给定的日期和时间按小时递增。我希望操纵数据帧,使其每15分钟递增一次,但保留相同的值。我该怎么做?谢谢

我试过:

df=df.asfreq('15Min',方法='ffill')

但我有一个错误:

“TypeError:无法将类型'Timestamp'与类型'long'进行比较”

当前数据帧:

datetime     value  
00:00:00     1  
01:00:00     2
datetime     value  
00:00:00     1  
00:15:00     1  
00:30:00     1  
00:45:00     1  
01:00:00     2    
01:15:00     2  
01:30:00     2  
01:45:00     2    
新数据帧:

datetime     value  
00:00:00     1  
01:00:00     2
datetime     value  
00:00:00     1  
00:15:00     1  
00:30:00     1  
00:45:00     1  
01:00:00     2    
01:15:00     2  
01:30:00     2  
01:45:00     2    
更新:
下面批准的答案是有效的,但我在上面尝试的初始代码也是有效的
df=df.asfreq('15Min',方法='ffill')
。我在处理其他数据帧时遇到了一些空值问题,所以我用fillna语句处理了这些问题,一切都正常了。

您可以使用,但需要手动添加最后一个值才能更正:

具有相同问题的另一个解决方案-需要追加新值才能正确追加最后一个值:

df['datetime'] = pd.to_timedelta(df['datetime'])
df = df.set_index('datetime')
df.loc[df.index.max() + pd.Timedelta(1, unit='h')] = 1

df = df.resample('15Min').ffill().iloc[:-1]
print (df)
          value
datetime       
00:00:00      1
00:15:00      1
00:30:00      1
00:45:00      1
01:00:00      2
01:15:00      2
01:30:00      2
01:45:00      2
但如果值是datetime:

print (df)
              datetime  value
0  2018-01-01 00:00:00      1
1  2018-01-01 01:00:00      2

df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index('datetime')
tr = pd.date_range(df.index.min(), 
                   df.index.max() + pd.Timedelta(45*60, unit='s'), freq='15Min')
df = df.reindex(tr, method='ffill')


您可以使用pandas.daterange

pd.date_range('00:00:00', '01:00:00', freq='15T')

对不起,这个问题对我来说不够清楚。“让他们增加”是什么意思?你想把行分成更小的单位吗?是的,我试过df=df.asfreq('15Min',method='ffill')。但是我得到一个“TypeError:无法将类型'Timestamp'与类型'long'进行比较”@ts初学者-什么是
print(df.info())
?datetime是datetime64[ns],值是float64@tsbeginner-我问了一些不同的问题,
print(df.info())
返回更多信息,因为
datetime是datetime64[ns]值为float64
我得到以下错误:TypeError:不支持+:'numpy.int64'和'Timedelta'的操作数类型。如果我的值是datetime。@TS初学者-请检查下面的注释。@TS初学者-似乎需要检查答案的最后两段,主要是不要忘记
df=df.set_index('datetime')
Ok,那么在
df=df.set_index('datetime')
什么是
print(df.index)
?与之前一样,datetime为datetime64,值为float64