pandas 将Python中的日期格式从YYYY:Q1更改为YYYY/MM

kmpatx3s  于 2023-01-04  发布在  Python
关注(0)|答案(3)|浏览(149)

我有一个数据集,使用格式'1998:q1'然而,这并不承认作为一个时间变量在织女星建兴.有没有办法转换成格式1998/01,并重复这对整个数据集?
link to dataset
当前格式:
| 日期|
| - ------|
| 1998年:第一季度|
| 1998年:第二季度|
所需格式:
| 日期|
| - ------|
| 一九九八至零一年度|
| 一九九八至零四年度|
试过的

df['Date']=pd.to_datetime(df['Date'],format = '%Y%M')
ui7jx7zq

ui7jx7zq1#

PeriodIndexfreq='Q'一起使用,然后使用strftime

df['Date'] = pd.PeriodIndex(df['Date'].str.replace(':', '-'), freq='Q').strftime('%Y/%m')

输出:

Date    Real_HPI    HPI_Rent  HPI_Income
0    1982/03   56.915399   73.676471   91.525857
1    1982/06   57.617379   73.555343   92.184294
2    1982/09   55.792959   70.956878   89.093476
3    1982/12   57.685409   74.935861   92.330045
4    1983/03   58.654319   75.943255   93.027588
..       ...         ...         ...         ...
157  2021/06  110.749697   94.707024   87.563696
158  2021/09  115.405297   99.181098   92.331803
159  2021/12  117.743697  101.504486   95.433863
160  2022/03  120.107097  103.799870   99.858203
161  2022/06  125.751597  108.749527  104.841177

[162 rows x 4 columns]
4sup72z8

4sup72z82#

替代解决方案,您可以使用apply(),如下所示-

def fun(var):
    l = var.split(":")
    if l[1] == "Q1":
        return l[0]+"/01"
    elif l[1] == "Q2":
        return l[0]+"/04"
    elif l[1] == "Q3":
        return l[0]+"/07"
    elif l[1] == "Q4":
        return l[0]+"/10"

df['new_date'] = df['Date'].apply(fun)

样本输出-

ymdaylpp

ymdaylpp3#

如果格式为yyyy-Qn,可以使用pd.to_datetime进行解析,所以在这种情况下,字符串替换就可以完成任务:

import pandas as pd

df = pd.DataFrame({'Q': ["1998:Q1","1998:Q2"]})
                  
print(pd.to_datetime(df["Q"].str.replace(":", "-")).dt.strftime("%Y/%m"))

0    1998/01
1    1998/04
Name: Q, dtype: object

相关问题