Python 是否尝试排除不使用datetime对象的块?

Python 是否尝试排除不使用datetime对象的块?,python,datetime,pandas,Python,Datetime,Pandas,我有一个数据框,其中一列包含一些日期时间数据,其他列包含任何数据。但是,有些数据被弄乱了,例如: 11/11/2014 22:28 15.1 11/11/2014 22:29 16.1 11/11/2014 22:30 15.2 bollocks 10000 11/11/2014 22:32 15.4 :00 11/11/2014 22:34 15.3 我想去掉那些乱七八糟的线路。现在,我决定用NaN值替换它

我有一个数据框,其中一列包含一些日期时间数据,其他列包含任何数据。但是,有些数据被弄乱了,例如:

11/11/2014 22:28    15.1
11/11/2014 22:29    16.1
11/11/2014 22:30    15.2
bollocks            10000
11/11/2014 22:32    15.4
:00                 
11/11/2014 22:34    15.3
我想去掉那些乱七八糟的线路。现在,我决定用NaN值替换它们(但是删除它们也会有帮助,只是它在循环中不起作用,所以这不是问题,在下一步中,我可以使用
dropna()
)。我使用的是
try()
,但是异常不起作用。我的代码如下所示:

for line in df.ix[:,"DATETIME"]:    
    try:
        line = datetime.datetime.strptime(line,"%d/%m/%Y %H:%M")
    except ValueError:
        line = 'NaN'
    except TypeError:
        line = 'NaN'
但最后,我仍然得到
值error:时间数据'15600E00F455AA'与格式'%d/%m/%Y%H:%m'不匹配
,并且故障行未替换为
NaN
。这里怎么了?
(我还尝试将错误放在一行上,如下所示:
除了(ValueError,TypeError):
而且它也不起作用……

这并不能严格回答您的查询,但如果您确定所有有效的日期时间字符串的格式为:
%d/%m/%Y%H:%m”
,您可以执行以下操作:

In [34]: df
Out[34]: 
           DATETIME   VALUES
0  11/11/2014 22:28     15.1
1  11/11/2014 22:29     16.1
2  11/11/2014 22:30     15.2
3          bollocks  10000.0
4  11/11/2014 22:32     15.4
5               :00      NaN
6  11/11/2014 22:34     15.3

In [35]: df = df.replace(r'^(?!\d{2}/\d{2}/\d{4} \d{2}:\d{2}).*', np.nan, regex=True)

In [36]: df
Out[36]: 
           DATETIME   VALUES
0  11/11/2014 22:28     15.1
1  11/11/2014 22:29     16.1
2  11/11/2014 22:30     15.2
3               NaN  10000.0
4  11/11/2014 22:32     15.4
5               NaN      NaN
6  11/11/2014 22:34     15.3

In [37]: df['DATETIME'].apply(lambda x: pd.to_datetime(x, format="%d/%m/%Y %H:%M"))
Out[37]: 
0   2014-11-11 22:28:00
1   2014-11-11 22:29:00
2   2014-11-11 22:30:00
3                   NaT
4   2014-11-11 22:32:00
5                   NaT
6   2014-11-11 22:34:00
Name: DATETIME, dtype: datetime64[ns]
将列转换为日期时间时,可以设置为
NaT
格式错误的数据

pd.to_datetime(df['DATETIME'], format = '%d/%m/%Y %H:%M', errors='coerce')

           DATETIME
0  11/11/2014 22:28
1  11/11/2014 22:29
2  11/11/2014 22:30
3               NaT
4  11/11/2014 22:32
5               NaT
6  11/11/2014 22:34

您确定错误是由您显示的代码位引发的吗?对不起,这个错误是由我展示的代码引发的,但不是在示例数据上。使用示例数据,将“156004E00F455AA”替换为“bollocks”。