2016-11-06 25 views
1

我如'1971q1''1972q2'等数据(年之后季)的一列当我这样做:如何期间字符串转换为实际的周期型

print(type(df.Quarterly)) 

答案是Series

我需要的是将此列“转换”/转换为真正的pd.Period类型,这样我就可以对它做简单的时间代数。谢谢

回答

3

您可以使用pd.PeriodIndex()方法。

假设你有以下DF:

In [517]: x 
Out[517]: 
    str_col 
0 1971q1 
1 1971q2 
2 1971q3 
3 1971q4 
4 1972q1 
5 1972q2 
6 1972q3 
7 1972q4 

In [518]: x.dtypes 
Out[518]: 
str_col object 
dtype: object 

让我们创建一个新的“期间”栏:

In [519]: x['period'] = pd.PeriodIndex(x.str_col, freq='Q') 

In [520]: x 
Out[520]: 
    str_col period 
0 1971q1 1971Q1 
1 1971q2 1971Q2 
2 1971q3 1971Q3 
3 1971q4 1971Q4 
4 1972q1 1972Q1 
5 1972q2 1972Q2 
6 1972q3 1972Q3 
7 1972q4 1972Q4 

In [521]: x.dtypes 
Out[521]: 
str_col object 
period  object 
dtype: object 

现在我们可以做到“一次代数”为例,让我们四分之一减去每个时期:

In [525]: x.period - 1 
Out[525]: 
0 1970Q4 
1 1971Q1 
2 1971Q2 
3 1971Q3 
4 1971Q4 
5 1972Q1 
6 1972Q2 
7 1972Q3 
Name: period, dtype: object 

或者你可以施放str_col柱重新gular Pandas/NumPy datetime

In [527]: pd.to_datetime(x.str_col, errors='coerce') 
Out[527]: 
0 1971-01-01 
1 1971-04-01 
2 1971-07-01 
3 1971-10-01 
4 1972-01-01 
5 1972-04-01 
6 1972-07-01 
7 1972-10-01 
Name: str_col, dtype: datetime64[ns] 
相关问题