我有一个类似于这样的csv,名为'output_data.csv'。
date product conditional client time termination_date
18/04/2020 Test 1 TRUE Test 1 10 NaN
19/04/2020 Test 1 TRUE Test 1 10 NaN
20/04/2020 Test 1 TRUE Test 1 10 NaN
21/04/2020 Test 1 TRUE Test 1 10 NaN
22/05/2020 Test 1 TRUE Test 1 10 NaN
23/05/2020 Test 1 TRUE Test 1 10 NaN
24/05/2020 Test 1 TRUE Test 1 10 NaN
18/05/2020 Test 1 TRUE Test 2 10 19/05/2020
19/05/2020 Test 1 TRUE Test 2 10 19/05/2020
20/05/2020 Test 1 TRUE Test 2 10 19/05/2020
21/05/2020 Test 1 TRUE Test 2 10 19/05/2020
22/05/2020 Test 1 TRUE Test 2 10 19/05/2020
23/05/2020 Test 1 TRUE Test 2 10 19/05/2020
24/05/2020 Test 1 TRUE Test 2 10 19/05/2020
我想在我的代码中写一行简单的代码 来过滤掉任何有终止日期的行。
所以输出的结果会是这样的。
date product conditional client time termination_date
19/05/2020 Test 1 TRUE Test 1 10
19/05/2020 Test 1 TRUE Test 1 10
20/05/2020 Test 1 TRUE Test 1 10
21/05/2020 Test 1 TRUE Test 1 10
22/05/2020 Test 1 TRUE Test 1 10
23/05/2020 Test 1 TRUE Test 1 10
24/05/2020 Test 1 TRUE Test 1 10
18/05/2020 Test 1 TRUE Test 2 10 19/05/2020
19/05/2020 Test 1 TRUE Test 2 10 19/05/2020
我曾经成功地使用过下面的代码 但这次我得到的是一个空白的csv文件。
output_data = output_data.loc[output_data['termination_date'] > output_data['date']]
我相信这可能是因为NaN值的原因,但我不确定。
有谁知道我可以对这行代码进行哪些修改,以忽略这些值并提供我提到的输出?
非常感谢
===编辑====
对不起,伙计们,看起来过滤器没有问题,但是在这段代码之前,我用下面的脚本把所有的 termination_date 都变成了 NaN。
output['termination_date'] = pd.to_datetime(output_data['termination_date'], errors='coerce', format='%d/%m/%Y')
这是把终止日期变成时间戳的尝试,我可以用它来过滤,但是 errors='coerce'把所有的值都变成了NaN,因为没有它,我得到了下面的错误。
ValueError: time data '2019-07-30 00:00:00+00' does not match format '%d/%m/%Y' (match)
这是因为原来的终止日期的格式是 "yyy-mm-dd hh:mm:ss+00" 所以我想把它变成和我的脚本一样的格式: "ddmmyyyy".
所以我想现在的问题是,我怎样才能把原始日期变成 ddmmyyyy,而不需要传递 errors='coerce' ?
我想是你的不等式的方向有问题。应该是这样的。
output_data = output_data.loc[output_data['termination_date'] < output_data['date']]
此外,如果你想保留Nan的值,你可以用... ..:
output_data = output_data.loc[(output_data['termination_date'] < output_data['date']) | (output_data['termination_date'].isna())]
根据你文章的编辑部分,你正在将列转换为datetime类型,但是你使用了斜线而不是数据样本中的连字符。你应该在你的函数中修改这一点。你也可以去掉 逼迫 属性或将其改为 漠视:
output['termination_date'] = pd.to_datetime(output_data['termination_date'], errors='ignore', format='%d-%m-%Y')
你需要这样做。
df['termination_date'] = pd.to_datetime(df['termination_date'])
df['date'] = pd.to_datetime(df['date'])
df = df[df['termination_date'] > df['date']]
输出:
date product conditional client time termination_date
7 2020-05-18 Test 1 True Test 2 10 2020-05-19
而<给出了这个输出。
df = df[df['termination_date'] < df['date']]
输出:
date product conditional client time termination_date
9 2020-05-20 Test 1 True Test 2 10 2020-05-19
10 2020-05-21 Test 1 True Test 2 10 2020-05-19
11 2020-05-22 Test 1 True Test 2 10 2020-05-19
12 2020-05-23 Test 1 True Test 2 10 2020-05-19
13 2020-05-24 Test 1 True Test 2 10 2020-05-19