如何从 python 中的时间序列中获取年月和季度
How to get Year Mont and Quarter from time series in python
我有这个数据集:
date_time
srch_id
2013-04-04 08:32:15
1
2013-04-04 08:32:15
1
..
2013-06-30 19:55:18
332785
2013-06-30 19:55:18
332785
我想把date_time分成:YM(Year_Month),YMQ(Year_Month_Quarter),Y和M:
date_time
srch_id
YMQ
YM
Y
M
2013-04-04 08:32:15
1
2013-04-2
2013-04
2013
4
2013-04-04 08:32:15
1
2013-04-2
2013-04
2013
4
..
2013-06-30 19:55:18
332785
2013-06-2
2013-04
2013
6
2013-06-30 19:55:18
332785
2013-06-2
2013-04
2013
6
我已经成功地将它与 YM、Y 和 M 分开,代码如下:
list_YM = [i.split(" ")[0][:-3] for i in list(train_dataset['date_time'])]
list_Year = [i.split(" ")[0][0:4] for i in list(train_dataset['date_time'])]
list_Month = [i.split(" ")[0][5:7] for i in list(train_dataset['date_time'])]
train_dataset['YM'] = list_YM
train_dataset['Year'] = list_Year
train_dataset['Month'] = list_Month
但是如何获得YMQ和Q呢?
如果你已经有了list_Month
中列出的月份,那么你可以使用简单的底整数除法得到每个月对应的季度:
list_quarter = [(((i - 1) // 3) + 1) for i in list_Month]
这是可行的,因为对于第 1、2 和 3 个月,此整数除法的结果将为零;第 4、5 和 6 个月 1 次;第 7、8 和 9 个月为 2;第 10、11 和 12 个月为 3。
对于 YMQ,您只需连接已有的 Y、M 和 Q。
如果您使用 pandas
包和 datetime
方法,则不需要使用 for-loops:
import pandas as pd
data = {'date_time': ['2013-04-04 08:32:15','2013-04-04 08:32:15','2013-06-30 19:55:18','2013-06-30 19:55:18'],
'srch_id': [1,1,332785,332785]}
example = pd.DataFrame(data)
# Convert to datetime to use its methods
example['date_time'] = pd.to_datetime(example['date_time'])
# Add year as string
example['Y'] = example['date_time'].dt.year.astype(str)
# Add month as string
example['M'] = example['date_time'].dt.month.astype(str)
# Add year and month as string
example['YM'] = example['Y'] + '-' + example['M']
# Add year and quarter as string
example['YQ'] = example['date_time'].dt.to_period('Q').astype(str)
# Add year, month and quarter? Every month is already related to a quarter
example['YMQ'] = example['Y'] + '-' + example['M'] + '-' + example['YQ'].str.slice(-2)
# If you want date_Time column as string type:
example['date_time'] = example['date_time'].astype(str)
输出:
Out[53]:
date_time srch_id Y M YM YQ YMQ
0 2013-04-04 08:32:15 1 2013 4 2013-4 2013Q2 2013-4-Q2
1 2013-04-04 08:32:15 1 2013 4 2013-4 2013Q2 2013-4-Q2
2 2013-06-30 19:55:18 332785 2013 6 2013-6 2013Q2 2013-6-Q2
3 2013-06-30 19:55:18 332785 2013 6 2013-6 2013Q2 2013-6-Q2
我有这个数据集:
date_time | srch_id | ||
---|---|---|---|
2013-04-04 08:32:15 | 1 | ||
2013-04-04 08:32:15 | 1 | ||
.. | |||
2013-06-30 19:55:18 | 332785 | ||
2013-06-30 19:55:18 | 332785 |
我想把date_time分成:YM(Year_Month),YMQ(Year_Month_Quarter),Y和M:
date_time | srch_id | YMQ | YM | Y | M |
---|---|---|---|---|---|
2013-04-04 08:32:15 | 1 | 2013-04-2 | 2013-04 | 2013 | 4 |
2013-04-04 08:32:15 | 1 | 2013-04-2 | 2013-04 | 2013 | 4 |
.. | |||||
2013-06-30 19:55:18 | 332785 | 2013-06-2 | 2013-04 | 2013 | 6 |
2013-06-30 19:55:18 | 332785 | 2013-06-2 | 2013-04 | 2013 | 6 |
我已经成功地将它与 YM、Y 和 M 分开,代码如下:
list_YM = [i.split(" ")[0][:-3] for i in list(train_dataset['date_time'])]
list_Year = [i.split(" ")[0][0:4] for i in list(train_dataset['date_time'])]
list_Month = [i.split(" ")[0][5:7] for i in list(train_dataset['date_time'])]
train_dataset['YM'] = list_YM
train_dataset['Year'] = list_Year
train_dataset['Month'] = list_Month
但是如何获得YMQ和Q呢?
如果你已经有了list_Month
中列出的月份,那么你可以使用简单的底整数除法得到每个月对应的季度:
list_quarter = [(((i - 1) // 3) + 1) for i in list_Month]
这是可行的,因为对于第 1、2 和 3 个月,此整数除法的结果将为零;第 4、5 和 6 个月 1 次;第 7、8 和 9 个月为 2;第 10、11 和 12 个月为 3。
对于 YMQ,您只需连接已有的 Y、M 和 Q。
如果您使用 pandas
包和 datetime
方法,则不需要使用 for-loops:
import pandas as pd
data = {'date_time': ['2013-04-04 08:32:15','2013-04-04 08:32:15','2013-06-30 19:55:18','2013-06-30 19:55:18'],
'srch_id': [1,1,332785,332785]}
example = pd.DataFrame(data)
# Convert to datetime to use its methods
example['date_time'] = pd.to_datetime(example['date_time'])
# Add year as string
example['Y'] = example['date_time'].dt.year.astype(str)
# Add month as string
example['M'] = example['date_time'].dt.month.astype(str)
# Add year and month as string
example['YM'] = example['Y'] + '-' + example['M']
# Add year and quarter as string
example['YQ'] = example['date_time'].dt.to_period('Q').astype(str)
# Add year, month and quarter? Every month is already related to a quarter
example['YMQ'] = example['Y'] + '-' + example['M'] + '-' + example['YQ'].str.slice(-2)
# If you want date_Time column as string type:
example['date_time'] = example['date_time'].astype(str)
输出:
Out[53]:
date_time srch_id Y M YM YQ YMQ
0 2013-04-04 08:32:15 1 2013 4 2013-4 2013Q2 2013-4-Q2
1 2013-04-04 08:32:15 1 2013 4 2013-4 2013Q2 2013-4-Q2
2 2013-06-30 19:55:18 332785 2013 6 2013-6 2013Q2 2013-6-Q2
3 2013-06-30 19:55:18 332785 2013 6 2013-6 2013Q2 2013-6-Q2