熊猫:替换特定的第n个字符

时间:2014-05-29 02:31:45

标签: python replace pandas

我是初学者和学习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)

1 个答案:

答案 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]