繁体   English   中英

在 Pandas 中选择特定月份的行

[英]Select rows for a specific month in Pandas

我有一个包含 12 小时数据超过 10 年的数据框。 所有数据都按日期存储。 我想提取包含特定月份数据的列(请注意,月份不是标准的 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

我认为需要转换to_datetime然后与monthstrftime%B比较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')]

这就是我要做的。 我会将日期和时间列与它们之间的空格合并。 然后将列名保留为 DATE。 该列看起来像这样

   DATE    
01-May-07 230 
01-May-07 330 
01-May-07 430

......然后我会将列转换为日期时间对象。

df['DATE'] = pd.to_datetime(df['DATE'], formate = '%d-%b-%y %H%M') 

然后将 DATE 列设置为索引

df = df.set_index('DATE') 

然后,当数据帧变成时间序列时,您可以通过多种方式根据时间提取部分数据。 例如,如果我只想要一月份的数据

jan_data = df['2007-Jan'] 

五月的第一周

may_1st_week = df['2007-May-01':'2007-May-07'] 

等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM