如何将pandas数据框中的DateTimeIndex更改为同年?

时间:2014-10-21 22:23:46

标签: python pandas

我有这样的数据:

                   Charge 1     Charge 2
observation_date                      
1970-01-31        35.535318   0.073390
1970-02-28        27.685739   0.050302

...

2013-01-31        27.671290   0.296882
2013-02-28        26.647262   0.225714
2013-03-31        21.495699   0.362151

如何重新索引数据(observation_date),以便所有年份都成为2013年?

所以1970-01-31成为2013-01-31等等。据我所知,索引会有很多次相同。

3 个答案:

答案 0 :(得分:2)

import pandas as pd
df = pd.read_table('data', sep='\s{2,}').set_index('observation_date')
df.index = pd.DatetimeIndex(df.index)
df.index = df.index + pd.DateOffset(year=2013)
print(df)

产量

             Charge 1  Charge 2
2013-01-31  35.535318  0.073390
2013-02-28  27.685739  0.050302
2013-01-31  27.671290  0.296882
2013-02-28  26.647262  0.225714
2013-03-31  21.495699  0.362151

答案 1 :(得分:0)

我会写一个更新年份的函数。 我将在这里通过一个简单的例子。

import pandas as pd
df = pd.DataFrame({'observation_date':["1970-01-31","1970-02-31","1970-04-31"]})
l= df.observation_date

def updateYear(x):
  n= x.split("-")
  n[0]="2013" #We replace the year data, which is the first value by 2013
  return "-".join(n)
print updateYear("1970-01-31")


df['b']= df["observation_date"].apply(lambda x:updateYear(str(x)))
print df

输出::

  observation_date           b
0       1970-01-31  2013-01-31
1       1970-02-31  2013-02-31
2       1970-04-31  2013-04-31

在你的情况下:

df= pd.read_csv(name)
df.index = df.index.apply(lambda x:updateYear(str(x)))

答案 2 :(得分:-1)

不确定我是否理解您的问题,但您可以搜索1970年开始的年份并替换为2013

例如。

  

new_date = re.sub('1970','2013',observation_date)