使用熊猫时配置日期解析器.周期指数



我有一个这种格式的日期列表:

>>> dates = ["01/01/2000", "02/01/2000", "25/01/2000", "01/01/3005"]

我想从这些日期创建一个pandas.PeriodIndex。但请注意,这些日期是英国格式,而不是美国格式,因此"02/01/2000"是 1 月 2 日,而不是 2 月 1 日。pandas.PeriodIndex的默认行为不起作用:

>>> pandas.PeriodIndex(dates, freq="D")
PeriodIndex(['2000-01-01', '2000-02-01', '2000-01-25', '3005-01-01'], dtype='period[D]', freq='D')

熊猫中的其他函数接受处理这种情况的"Day First"参数。我该如何解决此问题?

编辑:我还应该提到我正在使用句点而不是时间戳,因为我需要使用时间戳有效范围之外的日期。

to_datetimeformat字符串一起使用来创建DatetimeIndex它具有to_period转换为PeriodIndex的方法:

In [63]:
dates = ["01/01/2000", "02/01/2000", "25/01/2000"]
pd.to_datetime(dates, format='%d/%m/%Y').to_period(freq='D')
Out[63]:
PeriodIndex(['2000-01-01', '2000-01-02', '2000-01-25'], dtype='period[D]', freq='D')

您也可以只传递dayFirst=True

In [64]:
dates = ["01/01/2000", "02/01/2000", "25/01/2000"]
pd.to_datetime(dates, dayfirst=True).to_period(freq='D')
Out[64]:
PeriodIndex(['2000-01-01', '2000-01-02', '2000-01-25'], dtype='period[D]', freq='D')

更新

对于无效日期,您可以拆分字符串日期并转换为int然后将这些日期作为参数传递给PeriodIndexCTOR:

In [67]:
df = pd.DataFrame({'dates':dates})
df
Out[67]:
dates
0  01/01/2000
1  02/01/2000
2  25/01/2000
3  01/01/3005
In [72]:
df[['day','month','year']] = df['dates'].str.split('/', expand=True).astype(int)
df
Out[72]:
dates  day  month  year
0  01/01/2000    1      1  2000
1  02/01/2000    2      1  2000
2  25/01/2000   25      1  2000
3  01/01/3005    1      1  3005

In [75]:
df['period'] = pd.PeriodIndex(day = df['day'], month=df['month'], year = df['year'], freq='D')
df
Out[75]:
dates  day  month  year     period
0  01/01/2000    1      1  2000 2000-01-01
1  02/01/2000    2      1  2000 2000-01-02
2  25/01/2000   25      1  2000 2000-01-25
3  01/01/3005    1      1  3005 3005-01-01

您可以看到这会产生所需的结果:

In [77]:
pd.PeriodIndex(day = df['day'], month=df['month'], year = df['year'], freq='D')
Out[77]:
PeriodIndex(['2000-01-01', '2000-01-02', '2000-01-25', '3005-01-01'], dtype='period[D]', freq='D')

最新更新