根据日期从 Pandas 数据框中删除行

3
我将尝试使用 Pandas 创建一个 DataFrame,并且删除日期晚于201702的行。DataFrame结构如下:
    Date         Account Number
1   2019-02-21   123841234
2   2017-01-01   193741927
3   2015-03-04   981237432
4   2018-05-29   134913473
5   2012-05-12   138749173
6   2009-01-04   174917239

我正在读取csv文件(data.csv),并试图删除在2017-02-28之后的任何日期,如下所示:

data_csv = pd.read_csv('data.csv')
data_csv[data_csv.DATE < '2017-02-28']

这是否应该在日期格式为YYYY-MM-DD时正常工作,还是我需要进行某些操作来确保这些行从数据框中删除?

谢谢你的时间。

2个回答

3

如果您的日期字符串采用YYYY-MM-DD格式,则词典比较会直接奏效(适用于Python整体,而不仅仅是Pandas)。

'2009-01-04' < '2017-02-28'  
# True

'2019-01-04' < '2017-02-28'
# False

所以你的比较应该可以不做任何更改就能够正常工作。不过最好先将其转换为日期时间格式,这样你的代码就不会做出任何假设,并且仍然能够正常运行。


df.dtypes     

Date              object
Account Number     int64
dtype: object

df[df['Date'] < '2017-02-28']

         Date  Account Number
2  2017-01-01       193741927
3  2015-03-04       981237432
5  2012-05-12       138749173
6  2009-01-04       174917239

df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
df.dtypes

Date              datetime64[ns]
Account Number             int64
dtype: object

df[df['Date'] < '2017-02-28']

        Date  Account Number
2 2017-01-01       193741927
3 2015-03-04       981237432
5 2012-05-12       138749173
6 2009-01-04       174917239

谢谢你的帮助!我相信这会起作用,但是当我这样做时,我的输出csv比输入csv大。为了尝试解释一下,我正在将一个17GB的csv读入数据框架中,执行上面所示的日期过滤器,然后将修改后的数据框架to_csv。但是当它写入csv时,输出文件就变成了23GB。在删除某些日期< '2017-02-28'的行后,我的输出csv比原来的csv更大,这正常吗? - JMV12
@JMV12 我认为不应该增加它的大小,除非你还在做其他增加大小的操作? - cs95

2

我建议您将该字符串转换为Timestamp,假设data_csv.Date也是Timestamp

result = data_csv[data_csv.Date < pd.to_datetime('2017-02-28')]
print(result)

输出

        Date  Account Number
1 2017-01-01       193741927
2 2015-03-04       981237432
4 2012-05-12       138749173
5 2009-01-04       174917239

你真的不需要担心,pandas会自动处理datetime列中的字符串比较。只要按照YYYY-MM-DD的格式直接进行字符串比较即可。 - cs95
@cs95 我想你是对的,从某种意义上来说确实不需要,但我认为显式比隐式更好。 - Dani Mesejo
啊哈...引用禅宗,我明白了...当然,这更多是一个“你应该”而不是“你需要”的情况 :) - cs95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接