我有一个如下数据框,
+-----------+-------+----------+--+--+
| Date | OPP | Result | | |
+-----------+-------+----------+--+--+
| Sat 11/16 | @DAL | L110-102 | | |
+-----------+-------+----------+--+--+
| Wed 11/13 | @POR | W114-106 | | |
+-----------+-------+----------+--+--+
| Mon 11/11 | @LAC | L98-88 | | |
+-----------+-------+----------+--+--+
| Sun 11/10 | @LAL | W113-104 | | |
+-----------+-------+----------+--+--+
| Fri 11/8 | @NO | W122-104 | | |
+-----------+-------+----------+--+--+
| Wed 11/6 | vsSAC | W124-120 | | |
+-----------+-------+----------+--+--+
| Sat 11/2 | @MIL | L115-105 | | |
+-----------+-------+----------+--+--+
我正在尝试过滤> _____的日期。
这就是我尝试过的方法,但是并没有过滤大于Sun 11/10的所有日期
d1 = d1[(d1['Date'] > 'Sun 11/10')]
更新
我的专栏现在看起来像这样,我需要能够过滤New_Date> _____并排除“ NaT”。尝试d1[(d1['New_Date'] > '2019-11-01')]
但不起作用。
0 2019-11-20
1 2019-11-18
2 2019-11-16
3 2019-11-13
4 2019-11-11
5 2019-11-10
6 2019-11-08
7 2019-11-06
8 2019-11-02
9 2019-11-01
10 2019-10-30
11 2019-10-28
12 2019-10-26
13 2019-10-01
14 NaT
15 NaT
16 2019-10-18
17 2019-10-13
18 2019-10-10
19 2019-10-08
20 NaT
21 NaT
任何帮助将不胜感激。
答案 0 :(得分:1)
首先,您需要将日期转换为正确的datetime
对象,并提供正确的输入格式(我假设为<weekday> <month>/<day>
-您可以根据datetime
文档进行调整:{{3 }})。您可以通过以下方式进行操作:
df["Date_2"]=pd.to_datetime(df["Date"].astype(str), format="%a %m/%d")
然后使用python datetime.strptime()
方法对过滤条件进行类比转换:
from datetime import datetime
df.loc[df["Date_2"]>datetime.strptime("Thu 11/12", "%a %m/%d")]
整个示例:
import pandas as pd
from datetime import datetime
df=pd.DataFrame({"Date": ["Sat 11/16", "Fri 11/8", "Wed 11/13"], "x": [4,3,7]})
df["Date_2"]=pd.to_datetime(df["Date"].astype(str), format="%a %m/%d")
print("\nExample filtered: ")
print(df.loc[df["Date_2"]>datetime.strptime("Thu 11/12", "%a %m/%d")])
print("\nThe whole thing:")
print(df)
并输出:
Example filtered:
Date x Date_2
0 Sat 11/16 4 1900-11-16
2 Wed 11/13 7 1900-11-13
The whole thing:
Date x Date_2
0 Sat 11/16 4 1900-11-16
1 Fri 11/8 3 1900-11-08
2 Wed 11/13 7 1900-11-13
(由于未提供年份,因此假定为1900
)
答案 1 :(得分:1)
您是否愿意将格式更改为另一种格式,或者是否有一个单独的列,其日期可由收藏家搜索?我写了这个解决方案,展示了这条路线,也许它将帮助您提出想法,并且我愿意提出更改建议:
newdf = pd.read_csv('testdata2.csv', parse_dates=["Date"], date_parser=lambda x: pd.to_datetime(x, format="%a %m/%d"),
index_col="Date")
newdf = newdf.reset_index()
newdf['Date'] = newdf['Date'].mask(newdf['Date'].dt.year == 1900, newdf['Date'] + pd.offsets.DateOffset(year=2019))
newdf[(newdf['Date'] > '2019-11/10')]
#Out[63]:
# Date OPP Result
#0 2019-11-16 @DAL L110-102
#1 2019-11-13 @POR W114-106
#2 2019-11-11 @LAC L98-88
答案 2 :(得分:0)
据我了解,您是否要过滤日期以删除 NaT ?那不是你怎么做的。实际上,熊猫具有几种可以检查NaT的功能,例如pandas.isnull(),pandas.notna(),pandas.DataFrame.notna()等:
下面是一个简单的示例
>>> import pandas as pd
>>> pd.isnull(np.datetime64('NaT'))
True
>>> d1[d1['New_Date'].notna()]