[英]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
然后与month
或strftime
和%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.