Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据日期从数据框中删除行_Python_Pandas_Dataframe - Fatal编程技术网

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

Python 根据日期从数据框中删除行,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试创建一个包含熊猫的数据框,并在201702之后删除日期。数据帧的结构是这样的 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(da

我正在尝试创建一个包含熊猫的数据框,并在201702之后删除日期。数据帧的结构是这样的

    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']
data\u csv=pd.read\u csv('data.csv'))
数据共享[数据共享日期<'2017-02-28']
对于YYYY-MM-DD的日期格式,这应该正常工作吗?或者我必须对列格式做些什么来确保从数据帧中删除这些行


谢谢您的时间。

我建议您将字符串转换为
时间戳
,假设
数据\u csv.Date
也是
时间戳

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

如果您的日期字符串是YYYY-MM-DD格式的,那么字典的比较是开箱即用的(对于python,而不仅仅是熊猫)

'2009-01-04'<'2017-02-28'
#真的
'2019-01-04' < '2017-02-28'
#假的
所以你的比较结果应该不会有任何变化。虽然首先转换为datetime会更安全,所以您的代码在工作时不做任何假设


df.dtypes
日期对象
账号int64
数据类型:对象
df[df[“日期”]<“2017-02-28”]
日期帐号
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='procure')
df.dtypes
日期时间64[ns]
账号int64
数据类型:对象
df[df[“日期”]<“2017-02-28”]
日期帐号
2 2017-01-01       193741927
3 2015-03-04       981237432
5 2012-05-12       138749173
6 2009-01-04       174917239

您真的不知道,pandas在datetime列的字符串比较方面很聪明。只要与字符串直接比较就行了,假设它遵循YYYY-MM-DD格式。@cs95我想你是对的,在这个意义上你不需要这样做,但我相信显式比隐式好。啊哈。。。引用我看到的禅宗。。。当然,这更像是“你应该”而不是“你需要”的情况:)谢谢你的帮助!我相信这会起作用,但当我这样做时,我的输出csv比输入csv大。为了尝试和解释,我正在将一个17GB的csv读入一个数据帧,执行如上所示的日期过滤器,然后读入修改后的数据帧。但当它写入csv时,输出文件为23GB。删除日期为<'2017-02-28'的某些行后,我的输出csv比原来大,这正常吗?@JMV12我认为不应该这样,除非您正在做其他事情来增加它的大小?
        Date  Account Number
1 2017-01-01       193741927
2 2015-03-04       981237432
4 2012-05-12       138749173
5 2009-01-04       174917239
'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