将索引转换为日期时间索引

问题描述 投票:1回答:1

我的数据框是这样的:

YearMonth Number of Visitors 
Jan-91    177400
Feb-91    190600
Mar-91    189200
Apr-91    168000
May-91    161400

我想将索引转换为类似1991-01的格式。我尝试使用index.to_datetime,但收到错误:

ValueError: day is out of range for month

我的代码如下:

dataC = pd.read_csv('Visitors.csv', index_col='YearMonth', parse_dates=True, dayfirst=True)
dataC.index = dataC.index.to_datetime(dayfirst=True)

我能实现我的目标吗?

python pandas
1个回答
0
投票

对我来说,解决方案的第一部分为我工作:

import pandas as pd
from io import StringIO

pd.options.display.max_columns = 20

temp="""YearMonth,Number of Visitors
Jan-91,177400
Feb-91,190600
Mar-91,189200
Apr-91,168000
May-91,161400"""
#after testing replace 'pd.compat.StringIO(temp)' to 'Visitors.csv'
dataC = pd.read_csv(StringIO(temp), index_col='YearMonth', parse_dates=True)
print (dataC)
            Number of Visitors
YearMonth                     
1991-01-01              177400
1991-02-01              190600
1991-03-01              189200
1991-04-01              168000
1991-05-01              161400

print (dataC.index)
DatetimeIndex(['1991-01-01', '1991-02-01', '1991-03-01', '1991-04-01',
               '1991-05-01'],
              dtype='datetime64[ns]', name='YearMonth', freq=None)

如果要使用其他格式,一种可能的解决方法是按DataFrame.to_period表示月份期间:

DataFrame.to_period

在您的解决方案中,如果要将索引转换为dataC = dataC.to_period('m') print (dataC) Number of Visitors YearMonth 1991-01 177400 1991-02 190600 1991-03 189200 1991-04 168000 1991-05 161400 print (dataC.index) PeriodIndex(['1991-01', '1991-02', '1991-03', '1991-04', '1991-05'], dtype='period[M]', name='YearMonth', freq='M') ,正确的解决方案是DatemeIndexto_datetime参数:

to_datetime

0
投票

一种方法是将日期解析器传递给dataC = dataC.to_period('m') print (dataC) Number of Visitors YearMonth 1991-01 177400 1991-02 190600 1991-03 189200 1991-04 168000 1991-05 161400 print (dataC.index) PeriodIndex(['1991-01', '1991-02', '1991-03', '1991-04', '1991-05'], dtype='period[M]', name='YearMonth', freq='M')

read_csv

然后

dateparser = lambda x: pd.datetime.strptime(x, "%b-%y")

dataC = pd.read_csv('a.csv', index_col='YearMonth', parse_dates=True, date_parser=dateparser)

请记住,>>> dataC Number of Visitors YearMonth 1991-01-01 177400 1991-02-01 190600 1991-03-01 189200 1991-04-01 168000 1991-05-01 161400 中的%b取决于语言环境:strptime

© www.soinside.com 2019 - 2024. All rights reserved.