Python 熊猫过滤日期
我有一个如下所示的数据帧Python 熊猫过滤日期,python,pandas,Python,Pandas,我有一个如下所示的数据帧 +-----------+-------+----------+--+--+ | Date | OPP | Result | | | +-----------+-------+----------+--+--+ | Sat 11/16 | @DAL | L110-102 | | | +-----------+-------+----------+--+--+ | Wed 11/13 | @POR | W114-106 | | | +--
+-----------+-------+----------+--+--+
| 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 | | |
+-----------+-------+----------+--+--+
我正在尝试筛选日期>\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
Ie这是我尝试过的,但没有过滤所有大于11/10太阳的日期
d1=d1[(d1['Date']>'Sun 11/10')]
更新
我的专栏现在看起来像这样,我需要能够过滤新的日期>,并排除“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
任何帮助都将不胜感激 首先,您需要将日期转换为适当的
datetime
对象,提供适当的输入格式(我假设是/
-您可以根据datetime
文档:)对其进行调整。您可以通过以下方式执行此操作:
df[“Date_2”]=pd.to_datetime(df[“Date”].astype(str),format=“%a%m/%d”)
然后使用pythondatetime.strtime()
method对筛选条件使用类比转换:
从日期时间导入日期时间
df.loc[df[“Date_2”]>datetime.strtime(“Thu 11/12”,“a%m/%d”)]
所以整个例子:
将熊猫作为pd导入
从日期时间导入日期时间
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”)
打印(“\n示例筛选:”)
打印(df.loc[df[“Date_2”]>datetime.strtime(“Thu 11/12”,%a%m/%d”))
打印(“\n全部内容:”)
打印(df)
和输出:
过滤的示例:
日期x日期2
0 Sat 11/16 4 1900-11-16
2013年11月2日星期三7 1900-11-13
整件事:
日期x日期2
0 Sat 11/16 4 1900-11-16
1周五11/8 3 1900-11-08
2013年11月2日星期三7 1900-11-13
(由于没有提供年份,因此假定为
1900
)您是否愿意将格式更改为另一种格式,或者是否有一个单独的列,列上日期供您的批判员搜索?我写了这个解决方案,展示了这条路线,也许它会帮助你的想法,我愿意接受改变的建议:
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
据我所知,您是否只是为了删除NAT而过滤日期?那你就不是这样做的。事实上,Pandas有几个可以检查NAT的函数,例如Pandas.isnull()、Pandas.notna()、Pandas.DataFrame.notna()等: 下面是一个如何使用它的快速示例
>>> import pandas as pd
>>> pd.isnull(np.datetime64('NaT'))
True
>>> d1[d1['New_Date'].notna()]
请先尝试转换为日期时间。请不要将数据帧作为图像发布。以字典的形式发布,便于他人复制和测试。您可以通过
df.to_dict
获取数据帧字典。这是否回答了您的问题?根据日期格式略有不同。将需要以某种方式转换日期。您可以使用pandas到\u datetime
或datetime库解析日期。这个网站应该有助于确定应该使用哪种格式。嗨,我更新了我的问题,我能够将我的日期转换为yyyy-mm-dd格式,现在需要筛选>然后。