将字符串转换为日期时间熊猫

时间:2020-01-08 10:57:46

标签: python pandas dataframe datetime

我正在从API提取数据到其索引值如下的pandas数据框中:-

df.index=['Q1-2013',
 'Q1-2014',
 'Q1-2015',
 'Q1-2016',
 'Q1-2017',
 'Q1-2018',
 'Q2-2013',
 'Q2-2014',
 'Q2-2015',
 'Q2-2016',
 'Q2-2017',
 'Q2-2018',
 'Q3-2013',
 'Q3-2014',
 'Q3-2015',
 'Q3-2016',
 'Q3-2017',
 'Q3-2018',
 'Q4-2013',
 'Q4-2014',
 'Q4-2015',
 'Q4-2016',
 'Q4-2017',
 'Q4-2018']

它是字符串值的列表。有没有办法将其转换为熊猫日期时间? 我探索了一些问答,它们与使用pd.to_datetime一起使用,当索引属于对象类型时,该方法才有效。 在此示例中,索引值是字符串。 预期输出:

new_df=magic_function(df.index)
print(new_df.index[0])
01-2013

思考如何构建“ magic_function”。提前致谢。 Q1是1月的季度1,Q2是4月的季度2,Q3是7月的季度3,Q4是10月的季度4

3 个答案:

答案 0 :(得分:3)

通过一些操作使解析起作用,您可以根据需要使用pd.PeriodIndex和格式(原因是应该使用%Y%q格式):

df.index = [''.join(s.split('-')[::-1]) for s in df.index]
df.index = pd.PeriodIndex(df.index, freq='Q').to_timestamp().strftime('%m-%Y')
print(df.index)

Index(['01-2013', '01-2014', '01-2015', '01-2016', '01-2017', '01-2018',
       '04-2013', '04-2014', '04-2015', '04-2016', '04-2017', '04-2018',
       '07-2013', '07-2014', '07-2015', '07-2016', '07-2017', '07-2018',
       '10-2013', '10-2014', '10-2015', '10-2016', '10-2017', '10-2018'],
      dtype='object')

我们还可以使用str.replace获得所需的格式:

df.index = df.index.str.replace(r'(Q\d)-(\d+)', r'\2\1')
df.index = pd.PeriodIndex(df.index, freq='Q').to_timestamp().strftime('%m-%Y')

答案 1 :(得分:0)

false函数https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html

在应用to_datetime()时它是一个datetime64对象,to_datetime()将其变成一个周期对象,像to_period()这样的进一步修改将索引项变成字符串:

to_timestamp().strftime('%m-%Y')

答案 2 :(得分:0)

您可以将函数映射到索引:pandas.Index.map

.AsEnumerable

这将产生以下结果:

quarter_months = {
    'Q1': 1,
    'Q2': 4,
    'Q3': 7,
    'Q4': 10,
}

def quarter_to_month_year(quarter_year):
    quarter, year = quarter_year.split('-')
    month_year = '%s-%s'%(quarter_months[quarter], year)
    return pd.to_datetime(month_year, format='%m-%Y')

df.index = df.index.map(quarter_to_month_year)