gpt4 book ai didi

python - 在 pandas 中将季度周期转换为日期时间的干净方法

转载 作者:行者123 更新时间:2023-12-02 03:43:24 27 4
gpt4 key购买 nike

编辑:
如果您遇到这个问题并且您的字符串看起来像 1996-Q1,那么只需使用 pd.to_datetime(df['Quarter']) 将其转换为正确的 Pandas 日期时间。这个问题是关于解决所有不符合此标准格式的季度日期的问题。

原始问题:
我正在寻找一种很好的、​​可读且易于理解的方法(您下次可以记住的方法)将 Q3 1996 转换为 pandas 日期时间,例如 1996-07-01 在这种情况下。到目前为止我发现了这个,但它非常丑陋:

df = pd.DataFrame({'Quarter':['Q3 1996', 'Q4 1996', 'Q1 1997']})

df['date'] = (
pd.to_datetime(
df['Quarter'].str.split(' ').apply(lambda x: ''.join(x[::-1]))
))

print(df)
Quarter date
0 Q3 1996 1996-07-01
1 Q4 1996 1996-10-01
2 Q1 1997 1997-01-01

我希望以下内容能够工作,因为它是可读的,但不幸的是它没有:

df['date'] = pd.to_datetime(df['Quarter'], format='%q %Y')

问题还在于,pandas 进行简单处理时季度和年份的顺序显然是错误的。

谁能帮我找到一种更简洁的方法将 Q3 1996 转换为 pandas 日期时间?

最佳答案

您可以(并且应该)使用 pd.PeriodIndex 作为第一步,然后使用 PeriodIndex.to_timestamp 转换为时间戳:

qs = df['Quarter'].str.replace(r'(Q\d) (\d+)', r'\2-\1')
qs

0 1996-Q3
1 1996-Q4
2 1997-Q1
Name: Quarter, dtype: object

df['date'] = pd.PeriodIndex(qs, freq='Q').to_timestamp()
df

Quarter date
0 Q3 1996 1996-07-01
1 Q4 1996 1996-10-01
2 Q1 1997 1997-01-01

初始替换步骤是必要的,因为 PeriodIndex 期望您的句号采用 %Y-%q 格式。

<小时/>

另一种选择是在以与之前相同的方式执行字符串替换后使用pd.to_datetime

df['date'] = pd.to_datetime(
df['Quarter'].str.replace(r'(Q\d) (\d+)', r'\2-\1'), errors='coerce')
df

Quarter date
0 Q3 1996 1996-07-01
1 Q4 1996 1996-10-01
2 Q1 1997 1997-01-01
<小时/>

如果性能很重要,您可以拆分和合并,但可以干净地进行:

df['date'] = pd.to_datetime([
'-'.join(x.split()[::-1]) for x in df['Quarter']])

df

Quarter date
0 Q3 1996 1996-07-01
1 Q4 1996 1996-10-01
2 Q1 1997 1997-01-01

关于python - 在 pandas 中将季度周期转换为日期时间的干净方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53898482/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com