如何在Pandas中基于日期过滤数据框架行

如何在Pandas中基于日期过滤数据框架行

不同地区遵循不同的日期惯例(YYY-MM-DD,YYY-DD-MM,DD/MM/YY,等等)。要在数据中处理这样的字符串是很困难的。Pandas to_datetime()函数__允许将字符串格式的日期和时间转换为datetime64。这种数据类型有助于提取日期和时间的特征,从 “年 “到 “微秒”。

要根据日期过滤行,首先将DataFrame中的日期格式化为datetime64类型。然后使用Pandas包中的DataFrame.loc[]DataFrame.query[]函数来指定一个过滤条件。结果,获得数据的子集,也就是过滤后的DataFrame。让我们来看看一些相同的例子。

我们将使用一个由特定日期的帖子数量组成的样本DataFrame。将样本数据中的日期转换成datetime64类型,如下所示。

# Import Pandas package
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'num_posts': [4, 6, 3, 9, 1, 14, 2, 5, 7, 2],
                   'date' : ['2020-08-09', '2020-08-25', '2020-09-05', 
                            '2020-09-12', '2020-09-29', '2020-10-15', 
                            '2020-11-21', '2020-12-02', '2020-12-10', 
                            '2020-12-18']})
  
# Convert the date to datetime64
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
  
# Display dataframe
df
Python

如何在Pandas中基于日期过滤数据框架行?

示例 1:

使用DataFrame.loc[]函数根据日期过滤数据,loc[]函数用于通过标签或布尔数组访问DataFrame的一组行和列。在这个例子中,loc[]中的条件语句如果行满足条件(日期在9月1日至15日之间),则返回一个布尔数组,数值为True,否则为False。然后loc[]函数只返回那些具有True值的行。

# Import Pandas package
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'num_posts': [4, 6, 3, 9, 1, 14, 2, 5, 7, 2],
                   'date': ['2020-08-09', '2020-08-25', 
                            '2020-09-05', '2020-09-12', 
                            '2020-09-29', '2020-10-15',
                            '2020-11-21', '2020-12-02', 
                            '2020-12-10', '2020-12-18']})
  
# Convert the date to datetime64
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
  
# Filter data between two dates
filtered_df = df.loc[(df['date'] >= '2020-09-01')
                     & (df['date'] < '2020-09-15')]
# Display
filtered_df
Python

输出:

如何在Pandas中基于日期过滤数据框架行?

示例 2:

使用DateTimeIndex(dt)来访问单独的日期时间属性,如年、月、日、工作日、小时、分钟、秒、微秒等,作为loc[]函数的条件,如下。

注意:日期值应采用datetime64格式。

# Import Pandas package
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'num_posts': [4, 6, 3, 9, 1, 14, 2, 5, 7, 2],
                   'date': ['2020-08-09', '2020-08-25',
                            '2020-09-05', '2020-09-12',
                            '2020-09-29', '2020-10-15',
                            '2020-11-21', '2020-12-02',
                            '2020-12-10', '2020-12-18']})
  
# Convert the date to datetime64
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
  
# Filter data between two dates
filtered_df = df.loc[(df['date'] >= '2020-09-01')
                     & (df['date'] < '2020-09-15')]
  
# Display
print("\nPosts in December:")
print(filtered_df)
  
# Filter data for specific weekday (tuesday)
filtered_df = df.loc[df['date'].dt.weekday == 2]
  
# Display
print("\nPosts on all Tuesdays:")
print(filtered_df)
Python

输出:

如何在Pandas中基于日期过滤数据框架行?

示例 3:

使用DataFrame.query()函数根据日期过滤数据,query()函数过滤Pandas DataFrame,并通过在引号中指定一个条件来选择行。如下图所示,query()中的条件是选择8月份的数据(指定日期范围)。DataFrame的列被默认放在查询命名空间中,所以日期列可以在没有索引的情况下被访问(只需指定列名)。

# Import Pandas package
import pandas as pd
  
# Create a sample dataframe
df = pd.DataFrame({'num_posts': [4, 6, 3, 9, 1, 14, 2, 5, 7, 2],
                   'date': ['2020-08-09', '2020-08-25',
                            '2020-09-05', '2020-09-12',
                            '2020-09-29', '2020-10-15',
                            '2020-11-21', '2020-12-02',
                            '2020-12-10', '2020-12-18']})
  
# Convert the date to datetime64
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
  
# Filter data between two dates
filtered_df = df.query("date >= '2020-08-01' \
                       and date < '2020-09-01'")
  
# Display
filtered_df
Python

输出:

如何在Pandas中基于日期过滤数据框架行?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册