我是初学者和学习python。 虽然我熟悉SAS,但Python语言与SAS不同。 所以,我一直在通过搜索语法和其他语言来学习python语言。
我想知道如何用熊猫替换子字符串,例如' SUBSTR'在SAS。
具体来说,我想将YYYYMM
(年月形式)转换为YYYYQ
(年度季度表格)。即
201102 --> 20111
201106 --> 20112
201110 --> 20114
为此,我应该为每5~6个2个字符替换1个字符。
通过搜索这个主题,我已经知道了replace()的基本语法。但我不能适用于我的具体问题。
我在下面附上代码示例。
from pandas import DataFrame
import numpy as np
import pandas as pd
df = DataFrame({'date' : ['201101','201102','201103','201104','201105','201106']},
index = ['1','2','3','4','5','6'])
df['new_date'] = df['date'].str.replace('01','1')
print(df)
答案 0 :(得分:2)
我认为您应该将日期视为正确的日期,而不是字符串。看看大熊猫'time series functionality。
要将YYYYMM字符串的示例解释为日期,请使用格式字符串%Y%m
:
In [21]: df['date'] = pd.to_datetime(df['date'], format='%Y%m')
In [22]: df
Out[22]:
date
1 2011-01-01
2 2011-02-01
3 2011-03-01
4 2011-04-01
5 2011-05-01
6 2011-06-01
[6 rows x 1 columns]
然后使用回滚功能从每个日期获取季度开始日期。有许多不同的“抵消”可用。我不认为这是你想要的,但这说明了这个过程。请查看文档了解更多信息。
In [23]: from pandas.tseries.offsets import BQuarterBegin
In [24]: offset = BQuarterBegin()
In [25]: df['date'].apply(offset.rollback)
Out[25]:
1 2010-12-01
2 2010-12-01
3 2011-03-01
4 2011-03-01
5 2011-03-01
6 2011-06-01
Name: date, dtype: datetime64[ns]