如何将年份和月份名称转换为此数据框的datetime列:
region year Months
0 alabama 2018 January
1 alabama 2018 February
2 alabama 2018 March
3 alabama 2018 April
4 alabama 2018 May
当我这样做时:
pd.to_datetime(df_sub['year'] * 10000 + df_sub['Months'] * 100, format='%Y%m')
我收到此错误:
*** TypeError: unsupported operand type(s) for +: 'int' and 'str'
答案 0 :(得分:10)
您可以将year
列转换为字符串,添加Months
并在to_datetime
http://strftime.org/中使用参数format
:
print (pd.to_datetime(df_sub['year'].astype(str) + df_sub['Months'], format='%Y%B'))
0 2018-01-01
1 2018-02-01
2 2018-03-01
3 2018-04-01
4 2018-05-01
dtype: datetime64[ns]
答案 1 :(得分:4)
理解中的f-string(Python 3.6 +)
pd.to_datetime([f'{y}-{m}-01' for y, m in zip(df.year, df.Months)])
DatetimeIndex(['2018-01-01', '2018-02-01', '2018-03-01', '2018-04-01',
'2018-05-01'],
dtype='datetime64[ns]', freq=None)
str.format
pd.to_datetime(['{}-{}-01'.format(y, m) for y, m in zip(df.year, df.Months)])
DatetimeIndex(['2018-01-01', '2018-02-01', '2018-03-01', '2018-04-01',
'2018-05-01'],
dtype='datetime64[ns]', freq=None)
答案 2 :(得分:2)
这是一个简单的程序,可以获取您正在寻找的输出:
import pandas as pd
data_frame = pd.DataFrame({'Region': ['alabama', 'alabama', 'alabama', 'alabama', 'alabama'],
'Year': [2018, 2018, 2018, 2018, 2018], 'Months': ['January', 'February', 'March', 'April', 'May']})
date_1 ='{}-{}'.format(data_frame['Months'].iloc[0], data_frame['Year'].iloc[0])
date_2 = '{}-{}'.format('June', data_frame['Year'].iloc[4])
data_frame.index = pd.date_range(date_1, date_2, freq='M')
print(data_frame)
我们可以在范围的起始位置格式化日期,并从最终位置+ 1个月格式化date_2,以便我们避免索引错误。将这些值格式化为字符串将允许pandas使用date_range()函数将它们格式化为日期。我们可以将索引设置为此范围,因为您说您想要一个包含这些值的列,但如果您不希望将日期作为索引,我们还可以创建一个名为dates的列,并使用insert语句来在任何地方添加它们。在我们的date_range函数中,date_1将是我们的第一个日期,而date_2将是我们的最后日期。我们还可以将频率设置为每月,以便日期列中的索引与其他列中的索引对齐。以下是我们的输出:
Months Region Year
2018-01-31 January alabama 2018
2018-02-28 February alabama 2018
2018-03-31 March alabama 2018
2018-04-30 April alabama 2018
2018-05-31 May alabama 2018