3 回答
TA贡献1789条经验 获得超10个赞
errors='coerce'
如果在to_datetime
get中使用NaT
(日期时间缺失值),如果不是类似日期时间的值 - 您可以传递列以提高性能,而不是apply
循环:
df['c2'] = pd.to_datetime(df['c1'], errors='coerce')
print (df)
c1 c2
0 2020/10/01 2020-10-01
1 10/01/2020 2020-10-01
2 10/1/2020 2020-10-01
3 31/08/2020 2020-08-31
4 12-21-2020 2020-12-21
5 5-3-2020 2020-05-03
6 05-03-2020 2020-05-03
7 ERRER NaT
NaT然后按列删除带 s 的行c2:
df1 = df.dropna(subset=['c2'])
print (df1)
c1 c2
0 2020/10/01 2020-10-01
1 10/01/2020 2020-10-01
2 10/1/2020 2020-10-01
3 31/08/2020 2020-08-31
4 12-21-2020 2020-12-21
5 5-3-2020 2020-05-03
6 05-03-2020 2020-05-03
或者您可以将它们替换为某个日期时间(不是 string '1900-01-01'):
df['c2'] = pd.to_datetime(df['c1'], errors='coerce').fillna(pd.Timestamp('1900-01-01'))
print (df)
c1 c2
0 2020/10/01 2020-10-01
1 10/01/2020 2020-10-01
2 10/1/2020 2020-10-01
3 31/08/2020 2020-08-31
4 12-21-2020 2020-12-21
5 5-3-2020 2020-05-03
6 05-03-2020 2020-05-03
7 ERRER 1900-01-01
print (df.dtypes)
c1 object
c2 datetime64[ns]
dtype: object
TA贡献1845条经验 获得超8个赞
通过errors,coerce无法转换的将返回NaT
df['c2'] = pd.to_datetime(df['c1'], errors='coerce')
df
Out[76]:
c1 c2
0 2020/10/01 2020-10-01
1 10/01/2020 2020-10-01
2 10/1/2020 2020-10-01
3 31/08/2020 2020-08-31
4 12-21-2020 2020-12-21
5 5-3-2020 2020-05-03
6 05-03-2020 2020-05-03
7 ERRER NaT
TA贡献1934条经验 获得超2个赞
您可能需要事先使用 转换 ERRER replace
。这意味着具有缺失值 NaT 的其他行将保持为 NaT。
df['c1'] = df['c1'].replace('ERRER', '01/01/1900')
之后它应该可以工作:
df['c2'] = df.apply(lambda x: pd.to_datetime(x['c1']), axis=1)
添加回答
举报