python - 在 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
解决方案
我认为需要转换to_datetime
,然后与month
orstrftime
和%B
for进行比较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')]
推荐阅读
- java - Files.isWritable 的意外行为
- arduino - 带有 SIM 900a 的 Arduino - 如何将所有传入消息存储到文本文件中?
- elasticsearch - Elasticsearch 更改主分片数
- azure - azurerm_linux_virtual_machine 中的云初始化脚本中的错误处理
- verilog - Verilog 4位比较器结构模型
- sql - 使用外键将 XML 数据插入 SQL 表
- ios - 当通知中的数据更改时,SwiftUI 列表数据无法更新
- python - 遇到异常功能/输入验证问题
- reactjs - 如何在 rowinfo 反应表中再调用一个函数?
- flutter - MaterialPageRoute 与上下文有什么关系?