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”。