首页 > 解决方案 > 在 Pandas 中选择特定月份的行

问题描述

我有一个超过 10 年的 12 小时数据的数据框。所有数据都按日期存储。我想提取包含特定月份数据的列(请注意,月份不是标准的 1、2、3 格式)。我拥有的“日期”列的行如下所示:

01-May-07
02-May-07
.
.
.
31-Oct-17

如何仅选择仅包含 May、Jun 等数据的列。

最初我认为我可以使用df[df['DATE'].str.contains('May')]. 但它没有按预期工作,导致输出作为输入。

编辑 1

DATE    TIME    MOONPH  SPEED   GUST    CLOUD AMOUNT    DRY WET DEW RH
01-May-07   230 NM7 6   0   4   27.4    25.4    25.4    86
01-May-07   330 NM7 4   0   4   27.4    25.4    25.4    86
01-May-07   430 NM7 3   0   4   27.4    25.4    25.4    86
01-May-07   530 NM7 2   0   4   27.4    25.4    25.4    89
01-May-07   630 NM7 3   0   5   27.4    26  25.4    85
01-May-07   700 NM7 0   0   4   27.8    26  25.4    81
01-May-07   730 NM7 0   0   4   27.8    26  25.4    81
01-May-07   800 NM7 2   0   4   27.8    26  25.4    81
01-May-07   830 NM7 5   0   4   29.2    26  24.6    76
01-May-07   900 NM7 5   0   4   29.2    26  24.6    76
01-May-07   930 NM7 5   0   2   29.8    26  24.6    76
01-May-07   1000    NM7 5   0   4   30.8    26  24.6    76
01-May-07   1030    NM7 5   0   4   30.8    26  24.6    76
01-May-07   1100    NM7 6   0   4   31.4    26  24.6    68
.
.
.
01-May-17   1630    NM7 8   0   5   32.6    27.4    25.6    68
01-May-17   1930    NM7 8   0   5   32  27.4    25.6    69
01-May-17   430 NM7 0   0   5   27.2    25  24  83
01-May-17   30  NM7 0   0   5   29.6    27.2    26.2    82
01-May-17   530 NM7 0   0   5   26.6    24.4    23.4    83
01-May-17   130 NM7 0   0   5   28  25.6    24.6    82
01-May-17   630 NM7 0   0   5   26.8    24.4    23.3    81
01-May-17   730 NM7 0   0   5   27.2    24.4    23.4    80
01-May-17   330 NM7 0   0   5   27.2    25  24  83
01-May-17   1230    NM7 10  0   5   32.8    28.2    25.2    64
01-May-17   2330    NM7 4   0   4   30  26.4    24.9    75
01-May-17   2230    NM7 5   0   4   30  26.8    25.5    77
01-May-17   2130    NM7 4   0   4   30  26.8    25.5    77
01-May-17   830 NM7 2   0   5   27.2    24.4    23.4    78
01-May-17   930 NM7 3   0   5   31.2    27.2    25.6    72
01-May-17   1830    NM7 8   0   5   32  27.4    25.6    69
01-May-17   1130    NM7 6   0   5   32.8    28.2    25.2    64
01-May-17   2030    NM7 6   0   4   32  26.8    25.4    76
01-May-17   1330    NM7 10  0   5   33  27.6    25.4    64
01-May-17   1430    NM7 10  0   5   33  27.6    25.2    65

标签: pythonpandas

解决方案


我认为需要转换to_datetime,然后与monthorstrftime%Bfor进行比较month names

df = pd.DataFrame({'DATE': ['01-May-07', '02-May-07', '31-Oct-17']})
print (df)
        DATE
0  01-May-07
1  02-May-07
2  31-Oct-17

df = df[pd.to_datetime(df['DATE']).dt.month == 5]
df = df[pd.to_datetime(df['DATE']).dt.strftime('%B') == 'May']

print (df)
        DATE
0  01-May-07
1  02-May-07

如果以后需要使用日期时间:

df['DATE'] = pd.to_datetime(df['DATE'])
df = df[df['DATE'].dt.month == 5]
#df = df[df['DATE'].dt.strftime('%B') == 'May']
print (df)
        DATE
0 2007-05-01
1 2007-05-02

编辑:

如果不需要使用datetimes,对我来说,使用您的数据,您的方法有效:

df = df[df['DATE'].str.contains('May')]

推荐阅读