3 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
errors='coerce'
如果在to_datetime
get中使用NaT
(日期時(shí)間缺失值),如果不是類(lèi)似日期時(shí)間的值 - 您可以傳遞列以提高性能,而不是apply
循環(huán):
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
或者您可以將它們替換為某個(gè)日期時(shí)間(不是 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貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
通過(guò)errors,coerce無(wú)法轉(zhuǎn)換的將返回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貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
您可能需要事先使用 轉(zhuǎn)換 ERRER replace
。這意味著具有缺失值 NaT 的其他行將保持為 NaT。
df['c1'] = df['c1'].replace('ERRER', '01/01/1900')
之后它應(yīng)該可以工作:
df['c2'] = df.apply(lambda x: pd.to_datetime(x['c1']), axis=1)
添加回答
舉報(bào)