我有一列数据,如'1971q1' , '1972q2'等(年份后跟季度)当我这样做时:
print(type(df.Quarterly))答案是Series
我需要的是“转换”/将此列转换为真正的pd.Period类型,以便我可以使用它进行简单的时间代数。 谢谢
I have a column of data such as '1971q1', '1972q2', etc. (year followed by quarter) When I do:
print(type(df.Quarterly))the answer is Series
What I need is to "cast"/convert this column to a genuine pd.Period type so I can do simple time algebra with it. Thank you
最满意答案
你可以使用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列str_col为常规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]you can use pd.PeriodIndex() method.
Assume you have the following 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: objectlet's create a new 'period' column:
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: objectnow we can do "time algebra", for example let's subtract one quarter from each period:
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: objectalternatively you can cast the str_col column to regular 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]更多推荐
发布评论