根据年份和月份删除数据行

时间:2020-07-31 20:02:31

标签: python pandas

我知道可能已经有人问过这个问题,但是它是python的新手,仍然有问题。我从2020年4月开始提取了不完整的数据,现在我正试图从数据框中删除2020年4月的数据和/或创建一个不包含2020年4月的新数据框。

我将日期时间转换为年和月。 数据帧:cdf2 到目前为止创建了一个蒙版:

cdf2['year']=pd.DatatimeIndex(cdf2['Invoice Paid Date']).year
cdf2['month']=pd.DatatimeIndex(cdf2['Invoice Paid Date']).month
mask= cdf2=cdf2[(cdf2['year']==2020.0) & (cdf2['month']==4.0)]

正试图做cdf3=cdf2[~mask],但这没用

任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

这是一种方法:

首先,我创建了一个测试数据框,其日期为三月,四月和五月。

import pandas as pd

invoice_date = pd.date_range(start='2020-03-01', end='2020-05-15', freq='14d')
amt = [100 + i for i in range(len(invoice_date))]
df = pd.DataFrame({'invoice_date': invoice_date, 'amt': amt})
print(df)

  invoice_date  amt
0   2020-03-01  100
1   2020-03-15  101
2   2020-03-29  102
3   2020-04-12  103
4   2020-04-26  104
5   2020-05-10  105

然后,我创建并应用了布尔掩码。我用面具里的日期。我没有为月份和年份创建新列。

mask = ('2020-04-01' <= df['invoice_date']) & (df['invoice_date'] <= '2020-04-30')
trimmed = df[~ mask]
print(trimmed)

  invoice_date  amt
0   2020-03-01  100
1   2020-03-15  101
2   2020-03-29  102
5   2020-05-10  105