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)
添加回答
舉報