Pandas shift index忽略传递的shift对象

qlfbtfca  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(615)

假设我这样做过

import pandas as pd
df= pd.date_range('2023-04-01', '2023-05-01')
frequency = df.shift(freq='W')
print(frequency)

output I got freuqnecy as None

DatetimeIndex(['2023-04-02', '2023-04-09', '2023-04-09', '2023-04-09',
               '2023-04-09', '2023-04-09', '2023-04-09', '2023-04-09',
               '2023-04-16', '2023-04-16', '2023-04-16', '2023-04-16',
               '2023-04-16', '2023-04-16', '2023-04-16', '2023-04-23',
               '2023-04-23', '2023-04-23', '2023-04-23', '2023-04-23',
               '2023-04-23', '2023-04-23', '2023-04-30', '2023-04-30',
               '2023-04-30', '2023-04-30', '2023-04-30', '2023-04-30',
               '2023-04-30', '2023-05-07', '2023-05-07'],
              dtype='datetime64[ns]', freq=None) <<<<<<<<--------Here------<<<<<

根据文档,W代表周
我在这里错过了什么吗??我在寻找一个快速的解决办法。。有没有其他的方法来做?

Version: 1.4.2

ccrfmcuu

ccrfmcuu1#

我不知道你想做什么,但它给了你预期的结果。
根据documentation

month_starts = pd.date_range('1/1/2011', periods=5, freq='MS')
month_starts
DatetimeIndex(['2011-01-01', '2011-02-01', '2011-03-01', '2011-04-01',
               '2011-05-01'],
              dtype='datetime64[ns]', freq='MS')
month_starts.shift(10, freq='D')
DatetimeIndex(['2011-01-11', '2011-02-11', '2011-03-11', '2011-04-11',
               '2011-05-11'],
              dtype='datetime64[ns]', freq=None)

它产生了正确的结果。
在你的例子中,原始的df

DatetimeIndex(['2023-04-01', '2023-04-02', '2023-04-03', '2023-04-04',
               '2023-04-05', '2023-04-06', '2023-04-07', '2023-04-08',
               '2023-04-09', '2023-04-10', '2023-04-11', '2023-04-12',
               '2023-04-13', '2023-04-14', '2023-04-15', '2023-04-16',
               '2023-04-17', '2023-04-18', '2023-04-19', '2023-04-20',
               '2023-04-21', '2023-04-22', '2023-04-23', '2023-04-24',
               '2023-04-25', '2023-04-26', '2023-04-27', '2023-04-28',
               '2023-04-29', '2023-04-30', '2023-05-01'],
              dtype='datetime64[ns]', freq='D')

正在转换为下一周(始终为一周的星期日):

DatetimeIndex(['2023-04-02', '2023-04-09', '2023-04-09', '2023-04-09',
               '2023-04-09', '2023-04-09', '2023-04-09', '2023-04-09',
               '2023-04-16', '2023-04-16', '2023-04-16', '2023-04-16',
               '2023-04-16', '2023-04-16', '2023-04-16', '2023-04-23',
               '2023-04-23', '2023-04-23', '2023-04-23', '2023-04-23',
               '2023-04-23', '2023-04-23', '2023-04-30', '2023-04-30',
               '2023-04-30', '2023-04-30', '2023-04-30', '2023-04-30',
               '2023-04-30', '2023-05-07', '2023-05-07'],
              dtype='datetime64[ns]', freq=None)

他返回频率none,因为数据点没有频率。你可以清除“重复”,然后你就有了你喜欢的频率:

print(frequency.drop_duplicates())
DatetimeIndex(['2023-04-02', '2023-04-09', '2023-04-16', '2023-04-23',
               '2023-04-30', '2023-05-07'],
              dtype='datetime64[ns]', freq=None)

但是它将不会检测到该频率。

相关问题