首先,您似乎在datetime中交换了月份和日期,因此需要将参数format='%Y-%d-%m'添加到^{}(Python's strftime directives):df = pd.DataFrame({'Date': ['2016-24-02']})
print (df)
Date
0 2016-24-02
print (pd.to_datetime(df.Date, format='%Y-%d-%m'))
0 2016-02-24
Name: Date, dtype: datetime64[ns]
转换后,您可以使用:
另一个提取^{}的解决方案,然后转换为string,最后加上^{}的零填充:print (df.Date.dt.month.astype(str).str.zfill(2))
样品:start = pd.to_datetime('2015-02-24')
rng = pd.date_range(start, periods=10, freq='m')
df = pd.DataFrame({'Date': rng})
print (df)
Date
0 2015-02-28
1 2015-03-31
2 2015-04-30
3 2015-05-31
4 2015-06-30
5 2015-07-31
6 2015-08-31
7 2015-09-30
8 2015-10-31
9 2015-11-30
print (df.Date.dt.strftime('%m'))
0 02
1 03
2 04
3 05
4 06
5 07
6 08
7 09
8 10
9 11
Name: Date, dtype: objectprint (df.Date.dt.month.astype(str).str.zfill(2))
0 02
1 03
2 04
3 05
4 06
5 07
6 08
7 09
8 10
9 11
Name: Date, dtype: object
最后,您可以将^{}与条件一起使用^{}:saison = ["04","05","06","07","08","09"]
df['Saison'] = np.where(df.Date.dt.strftime('%m').isin(saison), 'Sommer','Winter')
print (df)
Date Saison
0 2015-02-28 Winter
1 2015-03-31 Winter
2 2015-04-30 Sommer
3 2015-05-31 Sommer
4 2015-06-30 Sommer
5 2015-07-31 Sommer
6 2015-08-31 Sommer
7 2015-09-30 Sommer
8 2015-10-31 Winter
9 2015-11-30 Winter