Python Pandas groupby,带有正则表达式,可捕获串联的不需要的元素
这是我第一次发帖,所以我希望这篇文章有足够的文档来解释我的问题 我正在处理美国国家海洋和大气管理局(NOAA)25多年的风向和风速数据,这些数据我已经清理并加载到熊猫数据框中。我能够成功地按月对数据进行排序,使用以下方法将我的结果隔离到每年7月:Python Pandas groupby,带有正则表达式,可捕获串联的不需要的元素,python,pandas,datetime,pandas-groupby,Python,Pandas,Datetime,Pandas Groupby,这是我第一次发帖,所以我希望这篇文章有足够的文档来解释我的问题 我正在处理美国国家海洋和大气管理局(NOAA)25多年的风向和风速数据,这些数据我已经清理并加载到熊猫数据框中。我能够成功地按月对数据进行排序,使用以下方法将我的结果隔离到每年7月: in: july_df = df[df['date'].str.contains('\d{4}\-(7|07)', regex=True)] in: july_df.head(5) Out: date time dir
in: july_df = df[df['date'].str.contains('\d{4}\-(7|07)', regex=True)]
in: july_df.head(5)
Out:
date time direction speed
24732 1992-07-01 00:00 128.0 4.1
24733 1992-07-01 00:10 120.0 3.3
24734 1992-07-01 00:20 117.0 3.2
24735 1992-07-01 00:30 108.0 3.1
24736 1992-07-01 00:40 112.0 2.9
然而,当我试图进一步分离数据时,仅从7月份开始按每日读数对其进行分组,我始终从第一天获得一些读数,这些读数的数量似乎随着我一次要查看的条目数量的变化而变化。在这里,我尝试在7月14日之前分组:
in: july_14 = july_df.groupby(df.date.str.contains("\d{4}\-07\-14", regex=True))
in: july_14.head(5)
out:
date time direction speed
24732 1992-07-01 00:00 128.0 4.1
24733 1992-07-01 00:10 120.0 3.3
24734 1992-07-01 00:20 117.0 3.2
24735 1992-07-01 00:30 108.0 3.1
24736 1992-07-01 00:40 112.0 2.9
26532 1992-07-14 00:00 91.0 4.3
26533 1992-07-14 00:10 82.0 4.2
26534 1992-07-14 00:20 78.0 4.6
26535 1992-07-14 00:30 73.0 4.6
26536 1992-07-14 00:40 71.0 4.2
我希望像以前一样,分组只输出与7月14日相关的结果,我想更仔细地分析这个日期
我认为问题在于我使用的正则表达式。例如,如果我将输入更改为不在数据集中的一天(7月32日),我仍然会得到7月1日的结果:
in: july_14 = july_df.groupby(df.date.str.contains("\d{4}\-07\-32", regex=True))
in: july_14.head()
out:
date time direction speed
24732 1992-07-01 00:00 128.0 4.1
24733 1992-07-01 00:10 120.0 3.3
24734 1992-07-01 00:20 117.0 3.2
24735 1992-07-01 00:30 108.0 3.1
24736 1992-07-01 00:40 112.0 2.9
当我按年分组时,我甚至得到了这种不稳定的结果:
print july_df.groupby(july_df.date.str.contains("2001", regex=True)).head(5)
date time direction speed
24732 1992-07-01 00:00 128.0 4.1
24733 1992-07-01 00:10 120.0 3.3
24734 1992-07-01 00:20 117.0 3.2
24735 1992-07-01 00:30 108.0 3.1
24736 1992-07-01 00:40 112.0 2.9
374667 2001-07-01 00:00 96.0 4.7
374668 2001-07-01 00:10 98.0 5.1
374669 2001-07-01 00:20 100.0 5.4
374670 2001-07-01 00:30 97.0 5.3
374671 2001-07-01 00:40 83.0 5.1
有人能指出我的错误吗
谢谢你的帮助。如果这是一个记录不足或重复的问题,请告诉我。您可以尝试以下方法,首先筛选所需的日期,然后分组吗
july_df[july_df['date'].str.contains('\d{4}-07-14')].groupby(['date','time']).agg(['count'])
谢谢你的帮助。我无法让它满足我的需要。然而,一位朋友建议我尝试一下:-将日期字段转换为使用pandates datetime df['date']=pd.to_datetime(df['date'])-然后,过滤我想要的月份和天数:df.loc[(df['date'].dt.month==07)和(df['date'].dt.day==14)],到目前为止,这似乎已经解决了我的问题。