Python 只保留带有日期的行

Python 只保留带有日期的行,python,pandas,Python,Pandas,我从excel导入了一个非常混乱的数据框,其中只有一些行在第一列中包含日期(索引0,没有标题)。如何删除所有不包含日期的行 我会使用pd.to_datetime和errors='concurve',然后通过索引删除空日期: 例如: >>> df x y 0 2011-02-03 1 1 x 2 2 1 3 3 2012-03-03 4 >>> df[pd.to_datetime(d

我从excel导入了一个非常混乱的数据框,其中只有一些行在第一列中包含日期(索引0,没有标题)。如何删除所有不包含日期的行

我会使用
pd.to_datetime
errors='concurve'
,然后通过索引删除空日期:

例如:

>>> df
            x  y
0  2011-02-03  1
1           x  2
2           1  3
3  2012-03-03  4

>>> df[pd.to_datetime(df.x, errors='coerce').notnull()]
            x  y
0  2011-02-03  1
3  2012-03-03  4
注意:如果列中有不同的日期格式,这将导致一些问题

说明

pd.to\u datetime
errors='concurve'
一起使用,将查找类似日期的字符串,如果未找到,则返回
NaT
(为空):

>>> pd.to_datetime(df.x, errors='coerce')
0   2011-02-03
1          NaT
2          NaT
3   2012-03-03
Name: x, dtype: datetime64[ns]
因此,您可以使用
notnull
获取所有非空值:

>>> pd.to_datetime(df.x, errors='coerce').notnull()
0     True
1    False
2    False
3     True
Name: x, dtype: bool

将其用作原始数据帧上的掩码将有助于向我们展示您的尝试。此外,您能否提供一些示例数据和预期输出(请参阅)。很难想象什么是日期,什么是没有任何数据的日期。
df[df.date.notnull()]
因此我一直在尝试选择字符串中包含类似日期的内容的位置,即.df.loc[df[0].str.contains('2017',na=False)],但该方法返回空的df请发布一个数据帧示例和所需的输出。另外,我也不明白为什么这是一个不充分的答案,在这里和其他场合。答案当然是猜测问题,但有教育意义。因此,如果你想责怪某人,就责怪OP,而不是花时间解释解决方案的人。我认为,只要所有格式都可以在不使用
格式
arg的情况下自动推断出来,
pandas.to_datetime()
仍然会毫无问题地解析具有多种格式的列。比如说<代码> df=PD(DataFrame)({0},‘03-04-1988’,‘1988年3月4日’,‘3月4日’1988’,‘03.04.1988’,‘3/4’/88’,‘03/04’/1988’})< /代码>将被正确处理。@ ALollz,同意,在这种情况下,它可能起作用,但是考虑DATAFRAM:<代码> DF= Pd。DataFrame({日期):[ [ 2011-13-03’,'2012-03-13'}])< /COD>,其中第一个是YYYY-DD-MM,第二个是YYYY-MM-DD。在本例中,它不会解析所有被认为是“类似日期”的内容