将pandas系列字符串转换为PeriodIndex,季度

问题描述 投票:0回答:1

我有一列代表季度的字符串(格式“%Y%q”),我想将其转换为PeriodIndex。如何做到这一点?什么都不起作用,找不到接受格式字符串并处理季度的 strptime 函数。

out[0]
 
0     200001
1     200002
2     200003
3     200004
4     200101
       ...  
94    202303
95    202304
96    202401
97    202402
98    202403
Name: 0, Length: 99, dtype: int64

想要:

PeriodIndex(['2000Q1',... '2024Q3'], dtype='period[Q-DEC]')
python pandas time-series period
1个回答
0
投票

您可以使用

pd.PeriodIndex.from_fields

对于整数(你说你有字符串,但你的样本有

dtype: int64
),对年份使用下限除法(
//
),对季度使用模数(
%
):

import pandas as pd

data = [202401, 202402, 202403, 202404]
df = pd.DataFrame({'Dates': data})

df['Quarters'] = pd.PeriodIndex.from_fields(year=df['Dates'] // 100, 
                                            quarter=df['Dates'] % 10, 
                                            freq='Q')

输出:

df['Quarters']

0    2024Q1
1    2024Q2
2    2024Q3
3    2024Q4
Name: Quarters, dtype: period[Q-DEC]

对于字符串,您可以使用

Series.astype
转换为整数并执行与上面相同的操作,或者通过
Series.str
进行切片然后再转换:

df = pd.DataFrame({'Dates': data}, dtype=str)

df['Quarters'] = pd.PeriodIndex.from_fields(year=df['Dates'].str[:4].astype(int), 
                                            quarter=df['Dates'].str[5:].astype(int), 
                                            freq='Q')
© www.soinside.com 2019 - 2024. All rights reserved.