检查 Pandas 中缺少的日期
在本文中,我们将学习如何在 Pandas 中检查缺失的日期。
方法:
- 数据框是使用pd.DataFrame()从列表字典中创建的,它接受数据作为其参数。请注意,这里的字典由两个名为Date和Name 的列表组成。它们的长度相同,并且给定的日期序列中缺少一些日期(从2021-01-18到 2021-01-25 )。我们也可以为这个方法提供一个 CSV 文件,而不是创建我们自己的数据集。
- df.set_index() 方法将日期设置为我们创建的数据框的索引。可以简单地使用print(df)打印数据框,以在将日期设置为索引之前和之后查看它。
Syntax: DataFrame.set_index(keys, drop=True, append=False, inplace=False)
在将日期设置为索引之前: 2021-01-18 Date Name 0 Jia 1 2021-01-20 Tanya 2 2021-01-23 Rohan 3 2021-01-25 Sam
将日期设置为索引后:
Name | |
---|---|
Date | |
2021-01-18 | Jia |
2021-01-20 | Tanya |
2021-01-23 | Rohan |
2021-01-25 | Sam |
- 现在,一旦我们将日期设置为索引,我们就将给定的日期列表转换为DateTime 对象。本来,我们列表中的日期是需要转换成DateTime对象的字符串。 Pandas 为我们提供了一个名为to_datetime()的方法,它将字符串格式的日期和时间转换为DateTime 对象。
Syntax: pandas.to_datetime(arg, errors=’raise’, format=None)
- pd.date_range() 方法接受开始日期和结束日期,并在该范围内创建日期序列。
Syntax: pandas.date_range(start=None, end=None, freq=None)
- Pandas.Index.difference() 返回一个新的索引,其中索引的元素不在其他索引中。因此,通过使用pd.date_range(start date, end date).difference(Date) ,我们可以得到日期列表中不存在的所有日期。返回的数据类型是类似不可变 ndarray 的 datetime64 数据。
Syntax: Pandas.Index.difference(other, sort=True)
示例 1:
Python3
#import pandas
import pandas as pd
# A dataframe from a dictionary of lists
data = {'Date': ['2021-01-18', '2021-01-20',
'2021-01-23', '2021-01-25'],
'Name': ['Jia', 'Tanya', 'Rohan', 'Sam']}
df = pd.DataFrame(data)
# Setting the Date values as index
df = df.set_index('Date')
# to_datetime() method converts string
# format to a DateTime object
df.index = pd.to_datetime(df.index)
# dates which are not in the sequence
# are returned
print(pd.date_range(
start="2021-01-18", end="2021-01-25").difference(df.index))
Python3
#import pandas
import pandas as pd
# A dataframe from a dictionary of lists
d = {'Date': ['2021-01-10', '2021-01-14', '2021-01-18',
'2021-01-25', '2021-01-28', '2021-01-29'],
'Total People': [20, 21, 19, 18, 13, 56]}
df = pd.DataFrame(d)
# Setting the Totale People as index
df = df.set_index('Total People')
# to_datetime() method converts string
# format to a DateTime object
df['Date'] = pd.to_datetime(df['Date'])
# dates which are not in the sequence
# are returned
my_range = pd.date_range(
start="2021-01-10", end="2021-01-31", freq='B')
print(my_range.difference(df['Date']))
输出:
最后,我们得到了 2021-01-18 和 2021-01-25 之间缺失的所有日期。
DatetimeIndex([‘2021-01-19’, ‘2021-01-21’, ‘2021-01-22’, ‘2021-01-24′], dtype=’datetime64[ns]’, freq=None)
示例 2:
让我们考虑另一个例子。但是,这次我们不会将日期设置为索引,而是会在pd.date_range()函数分配freq='B' (工作日频率)。
就像前面的例子一样,我们从列表字典中创建了一个数据框。但是,这次我们没有将日期值设置为索引。相反,我们将“Total People”列设置为我们的索引值。使用以开始日期、结束日期和频率作为参数的pd.date_range()函数,我们提供值。我们设置 freq= 'B'(工作日频率)以省略周末。最后, Pandas.Index.difference()将日期列作为参数并返回所有不在给定值集中的值。
蟒蛇3
#import pandas
import pandas as pd
# A dataframe from a dictionary of lists
d = {'Date': ['2021-01-10', '2021-01-14', '2021-01-18',
'2021-01-25', '2021-01-28', '2021-01-29'],
'Total People': [20, 21, 19, 18, 13, 56]}
df = pd.DataFrame(d)
# Setting the Totale People as index
df = df.set_index('Total People')
# to_datetime() method converts string
# format to a DateTime object
df['Date'] = pd.to_datetime(df['Date'])
# dates which are not in the sequence
# are returned
my_range = pd.date_range(
start="2021-01-10", end="2021-01-31", freq='B')
print(my_range.difference(df['Date']))
输出:
请注意,除了 2021-01-23、2021-01-24 和 2021-01-30 之外的所有缺失值都被返回,因为我们设置了freq='B'忽略了所有周末。